Разобрать простой JSON ответ на jquery

329
12 декабря 2016, 10:03

php

header('Access-Control-Allow-Origin: *');
header('Access-Control-Max-Age: 1000');
header('Content-Type: application/json; charset=utf-8');
echo 'online({"usr":"Admin","prj":"текст"}, {"usr":"Admin2","prj":"текст2"})';

Его нужно распарсить и вставить, как мне кажется циклом в div. Должно быть в итоге.

<font title="текст">Admin</font>, <font title="текст2">Admin2</font>

Что смог сделал - код представляю вам ниже. Цикл не возвращает ничего

$.ajax({
url: 'online.php',
dataType: 'jsonp',
jsonpCallback: 'online',
crossDomain: true,
type: 'GET',
data: {'online': 'show'},
cache: false,
success: function(data){
i = 0;
while ( i < data.length )
{
alert(data[i].usr);
i++;
}
}
});
Answer 1

Пофантазирую.

  1. Если вы получаете ответ от стороннего скрипта, то в том виде, который вы указали он неправильный. Но если вы не можете на это повлиять, придется принудительно парсить

    var obj = jQuery.parseJSON('[' + data + ']');

  2. Если скрипт ваш, то тогда нужно добиться выдачи валидного JSON объекта (или массива) со стороны сервера

Добавлено После редактирования вопроса стало понятнее. У вас неправильно обрабатывается JSONP ответ. Ответ будет загружен в виде скрипта и будет вызвана функция online с двумя параметрами. И объявлять success не имеет смысла. Еще, если вы хотите в цикле перебирать объекты, сделайте так, чтобы в функцию передавался массив

echo 'online([{"usr":"Admin","prj":"текст"}, {"usr":"Admin2","prj":"текст2"}])';

На стороне браузера должна быть функция типа:

function online(users) {
    for (var ix = 0, len = users.length; ix < len; ix += 1) {
        // делаем что-то с users[ix]
    }
}
Answer 2

Попробуй так:

success: function(data) {
   var obj = jQuery.parseJSON(data);
   ...
}
READ ALSO
Убрать запятую в конце массива

Убрать запятую в конце массива

Вывожу данные из массиваПри выводе последней строки нужно убрать запятую и пробел (

506
Скролл с конца div

Скролл с конца div

Добрый день!

272
Jquery Событие over для элементов

Jquery Событие over для элементов

Суть вопроса такова - можно ли как-то сделать событие чтобы когда один элемент находится над другим срабатывало событие?

231