Я получаю ошибку анализа при использовании jQuery для загрузки некоторых данных JSON. Вот отрывок моего кода:
jQuery.ajax({
dataType: "json",
success: function (json)
{
jQuery.each(json, function ()
{
alert(this["columnName"]);
});
}
});
Я не получаю ошибок при парсинге непустого объекта JSON. Таким образом, мое предположение - то, что проблема с моим сериализатором.
Вопрос: как я форматирую пустой объект JSON, который jQuery не будет считать уродливым?
Это - то, что я попробовал до сих пор без успеха:
{[]}
{[null]}
{}
{null}
{"rows": []}
{"rows": null}
{"rows": {}}
ОБНОВЛЕНИЕ:
Я могу понять, что был несколько неопределенен - позволяют мне попытаться разъясниться:
Парсинг объекта JSON не является проблемой здесь - JQuery - я думаю.
jQuery бросает ошибку анализа (вызывает функцию ошибок). Кажется, что внутренняя проверка jQuery JSON не принимает ни одного из перед упомянутыми объектами. Даже допустимые.
Вывод функции ошибок:
XMLHttpRequest:
XMLHttpRequest readyState=4 status=200
textStatus:
parsererror
errorThrown:
неопределенный
Это идет для всего из перед упомянутыми объектами.
Во-первых {[]}
, {[null]}
, и {null}
не будет работать, потому что они - все недопустимые объекты JSON (как проверено блоком проверки допустимости JSON).
Остающиеся объекты являются всеми допустимыми объектами JSON, таким образом, Ваш success
функция должна становиться вызванной.
Если Вы передаете немассив или подобный массиву объектный объект затем each
функция перечислит Ваш json
объект его именованными свойствами. В случае Ваших трех объектов, что у каждого есть a rows
свойство this
будет установлен на []
, null
, и {}
соответственно, ни один из которых не имеет a columnName
припишите, таким образом, неопределенная ошибка будет брошена.
Ваш {}
объект, с другой стороны, не имеет никаких свойств, так не должен вызывать ошибку потому что each
вызов циклично выполнится 0 раз. Что отображает следующая строка, если Вы добавляете его как первую строку в Вашем success
функция?
alert(typeof json + ' ' + (json == null));
Вы ищете это:
[]
пустой массив. Таким образом, если Вы планируете выполнить итерации по нему сразу же, затем в чем Вы нуждаетесь, массив.
Вы проверяли, возвращается ли JSON правильно во-первых перед каждым? Установите пустое значение как {} и проверьте, похоже ли оно на это прежде .each
Также это помогло бы знать, как Ваш JSON похож, когда существуют данные.
Вместо:
$(json).each(function () { ... });
Я думаю, что Вы хотите использовать:
$.each(json, function () { ... });
Эта функция не является тем же как $ () .each () - который используется для итерации, исключительно, по объекту jQuery. Эта функция может использоваться для итерации по чему-либо.