Что не так с этим JSON? - PullRequest
       2

Что не так с этим JSON?

1 голос
/ 23 апреля 2011

Следующий JSON - это то, что я отправляю обратно на свой скрипт jQuery с сервера.

{"items": [
{ "id": "116", "first_name": "Sean", "last_name": "borsen" },
{ "id": "871", "first_name": "Sergio", "last_name": "spake" },
{ "id": "1337", "first_name": "SethTest", "last_name": "Test" }
],
"message": "success"
}

Я собираюсь использовать этот объект для создания HTML-таблицы. Когда я возвращаю этот тип JSON, я получаю одну из следующих 2 ошибок в Chrome:

Uncaught SyntaxError: Неожиданный токен ','

или эта ошибка

Uncaught SyntaxError: Неожиданный токен ':'

Вот мой почтовый индекс AJAX

            $.ajax({
                url: "ClientEmarGroup.aspx",
                datatype: 'json',
                data: eval('(' + d + ')'),
                success: bindData
            });

Вот строка, в которой я получаю сообщение об ошибке в моей функции bindData:

    bindData = function (data) {
        var $d = eval("(" + data + ")");

Далее, я заставляю скрипт работать, если я форматирую мои элементы JSON следующим образом:

{"items": [
{ "id": "116", "name": "Sean borsen" },
{ "id": "871", "name": "Sergio spake" },
],
"message": "success"
}

Но это не то, что я хочу.

Итак, мой вопрос: что не так с моим форматированием строки JSON, которое мешает мне отправить сложный объект обратно в jQuery?

Как мне отформатировать мой JSON, чтобы он возвращал массив элементов с более чем 2 свойствами?

Ответы [ 5 ]

5 голосов
/ 23 апреля 2011

Вы правильно написали proeprty dataType, обратите внимание на заглавную T.

Это заставляет jQuery попытаться самостоятельно определить тип данных, и если вы не обслуживаете JSON с помощьюправильный тип содержимого, он попытается проанализировать его как что-то еще, например XML.

Если jQuery удастся правильно угадать тип данных, он проанализирует строку до объекта перед вызовом функции успеха, поэтому выне следует анализировать данные снова.

Примечание. Если вам нужно проанализировать JSON, вы должны обратить внимание на функцию eval, вам следует использовать метод $.parseJSON.

2 голосов
/ 23 апреля 2011

Это совершенно правильно.

Но вы не должны использовать eval(), а JSON.parse() для анализа JSON.Чтобы получить запасной вариант для браузеров, не имеющих встроенной поддержки JSON, также вставьте json2.js

2 голосов
/ 23 апреля 2011

В вашем JSON нет ничего плохого (и вы можете использовать JSONLint для проверки).

Вы должны отключить JSON для нативных типов с eval()тем более что jQuery имеет $.parseJSON().

1 голос
/ 23 апреля 2011

Если вы скажете jQuery, что ожидаете json, он распакует его для вас и вызовет вашу функцию успеха с соответствующим объектом. Вам не нужно разбирать ответ самостоятельно. Кроме того, jQuery будет правильно кодировать объект или использовать строку в формате параметров запроса в кодировке URL, так что вам также не понадобится eval. Если вы отправляете JSON, вам нужно будет использовать JSON.stringify() для объекта и установить contentType на 'application/json', а также dataType (как заметил @Guffa, правильно указано) в 'json'

$.ajax({
    url: "ClientEmarGroup.aspx",
    dataType: 'json',
    data: d,
    success: function(data) {
       // now simply use the data, you don't need the eval
    }
});
0 голосов
/ 23 апреля 2011

отсутствует закрытие одного:

var bindData = function (data) {
    var $d = eval("(" + data + ")");
}; // here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...