2009-04-06 4 views
15

Я получаю ошибку синтаксического анализа при использовании jQuery для загрузки некоторых данных JSON. Вот отрывок из моего кода:jQuery.ajax() + пустой JSON object = parse error

jQuery.ajax({ 
    dataType: "json", 

    success: function (json) 
    { 
     jQuery.each(json, function() 
     { 
      alert(this["columnName"]); 
     }); 
    } 
}); 

Я не получаю ошибок при разборе непустого объекта JSON. Поэтому я предполагаю, что проблема связана с моим сериализатором.


Вопрос: как отформатировать пустой объект JSON, который JQuery не будет рассматривать уродливы?

Это то, что я пытался до сих пор, не имели успеха:

{[]} 

{[null]} 

{} 

{null} 


{"rows": []} 

{"rows": null} 

{"rows": {}} 



UPDATE:

Я могу понять, что я был несколько расплывчатым - пусть я попробую и уточняю:

Разбор объекта JSON здесь не проблема - JQuery - я думаю.

jQuery выдает ошибку синтаксического анализа (вызывает функцию ошибки). Кажется, что внутренняя JSON-проверка jQuery не принимает ни одного из ранее упомянутых объектов. Даже не действительные.

Выход функции ошибки:

XMLHttpRequest: XMLHttpRequest readyState=4 status=200
textStatus: parsererror
errorThrown: undefined

Это касается всех ранее упомянутых объектов.

+0

Это проблема с подмножествами, они надевают У меня есть все. –

+0

все, но вы третий пример недействительны JSON, так как в словаре нет ключа – cobbal

+0

Обновлено еще несколькими попытками. Все еще возникают ошибки анализа. – roosteronacid

ответ

1

Вместо:

$(json).each(function() { ... }); 

Я думаю, что вы хотите использовать:

$.each(json, function() { ... }); 

От jQuery.each documentation:

This function is not the same as $().each() - which is used to iterate, exclusively, over a jQuery object. This function can be used to iterate over anything.

+0

Type'o.Но спасибо - отредактирован и сохранен. На самом деле это не ответ. – roosteronacid

1

ли вы проверить, если JSON возвращается правильно первое место перед каждым? Установите пустое значение как {} и проверьте, похоже ли это до .each

Также это поможет узнать, как выглядит ваш JSON, когда есть данные.

2

вы ищете это:

[] 

пустой массив. То есть, если вы планируете последовательно перебирать его, то вам нужен массив.

5

Во-первых {[]}, {[null]} и {null} не будут работать, потому что они все недействительные объекты JSON (проверяемый JSON validator).

Остальные объекты являются действительными объектами JSON, поэтому ваша функция success должна быть вызвана.

Если вы передаете объект объекта, не относящийся к массиву или массиву, то функция each перечислит ваш объект json своими именованными свойствами. В случае трех ваших объектов, у каждого из которых есть свойство rows, this будет установлено в [], null и {} соответственно, ни один из которых не имеет атрибута columnName, поэтому будет выбрана неопределенная ошибка.

Ваш объект {} с другой стороны не имеет свойств, поэтому не должен вызывать ошибку, потому что вызов each будет проходить 0 раз. Что отображает следующая строка, если вы добавите ее в качестве первой строки в вашей функции success?

alert(typeof json + ' ' + (json == null)); 
2

Ваш веб-сервис может возвращать null. Я обнаружил, что возврат null из вызова веб-службы возвращает ответ с кодом состояния 200, «Хорошо», но jQuery впоследствии выдает parseerror.

Если это так, это не имеет никакого отношения к тому, что вы отправляете на сервер, и всему, что отправляет сервер.

Если вы можете изменить веб-службу, вы можете попробовать вернуть пустой объект JSON или значение по умолчанию вместо Null. Кроме того, вы можете проверить этот сценарий ошибки в своем обработчике ошибок, зная, что это означает, что ваш вызов был возвращен null.

0

У меня возникли аналогичные проблемы при запросе действительного JSON с сервера.

Мой сервер отбывал тип содержимого текста/JavaScript

Я не использовал дополнительный параметр jQuery.ajax из «» DATATYPE так JQuery был interpretting выход JavaScript (например, проложенный JSON), не в чистом виде JSON.

Добавление типа данных: «JSON» в объект настроек, переданный в метод ajax jQuery, решил проблему.

0

Если бы эта проблема была решена и была решена с помощью jsonserializer в моей веб-службе для форматирования пустой строки. результатом является "\" \ "" по существу "";

9

Решение вернуть код состояния 204, а не 200 с сервера 204 «нет контента» и он возвращает успех, а не пытаться вызвать парсер