Ответ JSON от сценария PHP, заключенного в <head></head><body> ... <body> - PullRequest
0 голосов
/ 11 сентября 2010

Я пытаюсь отладить простую проблему PHP / JSON / jQuery.

Следующий скрипт PHP:

header('Content-type: text/javascript');
echo json_encode(array('type'=>'error','message'=>'arg')); 

используется jQuery, но когда строка:

var results = jQuery.parseJSON(responseText);

выполняется, анализатор JQuery JSON дает следующее:

<code>uncaught exception: Invalid JSON: <head></head><body><pre>{"type":"error","message":"oops!"}

Очевидно, что head / body / pre не должны быть возвращены.

Я не вижу ни скрытых символов, ни чего-либо неупорядоченного в своем коде PHP ..

Есть идеи?

Ответы [ 4 ]

1 голос
/ 12 ноября 2010

В этот раз меня поставили в тупик в последние два дня.Я использую функцию ajaxSubmit плагина jQuery Form для отправки формы через AJAX без перезагрузки страницы.Я наконец наткнулся на ответ после того, как этот вопрос показал мне параметр, который я не заметил ранее: dataType.

За кулисами создается iframe, который фактически выполняет обратный вызов.на сервер.Ответ от сервера извлекается из iframe, который содержит вместе с ним теги.

Плагин jQuery Form обрабатывает ситуацию, позволяя вам указать тип ответа, ожидаемого от сервера.Если в качестве типа ответа я укажу 'json', для получения JSON из тегов будут выполнены следующие несколько строк кода:

// account for browsers injecting pre around json response
var pre = doc.getElementsByTagName('pre')[0];
if (pre) {
    xhr.responseText = pre.innerHTML;
}

(doc - это ссылка на документ iframe, а xhr - этоОбъект XmlHttpResponse, который в конечном итоге возвращается из функции плагина.)

Я не знаю точно, как вы делаете свой вызов AJAX, но я предполагаю, что подобная конструкция (возможно, с использованием фрагмента документа) позволитВы должны извлечь необходимый JSON из ответа.

0 голосов
/ 11 сентября 2010

json для php find "function send_as_json($obj)"

типы заголовков

0 голосов
/ 11 сентября 2010

Установить заголовок для приложения / JSON.

0 голосов
/ 11 сентября 2010

Попробуйте не отправлять header('Content-type: text/javascript');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...