У меня странные проблемы с разбором того, что я считаю правильно сформированным json, возвращенным из вызова ajax (используя jQuery 1.4.4). Как ни странно, на моем dev-сервере он работает нормально, но не работает в сети.
Данные возвращаются из вызова ajax следующим образом:
returnData = { "status": true, "data": { "error_return": false, "error_index": -1, "message_display": { "main_message": "hello", "name": "tommy tune the man", "mailed_to": "t@t.com", "subject": "I tried this", "subject_message": "you have a technical question or comment.", "test_me": "you have a technical question or comment." } } };
jsLint и jsonLint оба проверяют эту структуру.
Ошибка возникает при попытке доступа к returnData.data
В случаях «сбоя» я удалил dataType из опций jQuery.ajax, что позволило использовать функцию «наилучшего предположения». Если я указываю json, jQuery выдает ошибку синтаксического анализа, утверждая, что недействительный json. Я пробовал все виды вещей (включая страшный eval () и плагин jquery-2json, но не повезло. Даже утилита jQ jQuery.parseJSON не работает.
Проблема возникает как в FF 3.6.13, так и в последней версии Safari / Chrome.
Вопрос 1: кто-нибудь, почему знает, что последняя версия jQuery выдает ошибку разбора на этом?
Вопрос 2: когда я попробую следующее, у меня получится:
- var success = returnData.status;
НО следующее не определено:
- var errorReturn = returnData.data.error_return.
Как ни странно, Firebug видит это как объект, если я "вставляю" объект в консоль, но в сценарии
1) возвращает «нет дочерних объектов» в console.dir
2) НО покажет объект в console.log.
Идеи с благодарностью
UPDATE:
Я обнаружил, что сервер неправильно устанавливает тип контента. В серверном PHP, который форматирует JSON для возврата (созданный в данном случае в Drupal 6 (мне пришлось взломать необязательное ядро, включающее «commons.inc»), я заменил тип контента на «application / json». теперь работает. Эта проблема была исправлена в Drupal 7.