Как получить ответ jSON в переменную из скрипта jquery - PullRequest
20 голосов
/ 11 августа 2009

У меня возникли проблемы с моим скриптом jquery, приведенным ниже, это базовая урезанная версия, и даже она не будет работать, у меня есть php-файл, к которому обращается скрипт jquery, я настроил его для кодирования и отображения json response

Затем в скрипте jquery он должен прочитать значение и ответить на него, но он не получает ответ.

Является ли json.response неправильным способом вызова переменной в строке json, которая является именем ответа?

Может кто-нибудь помочь, пожалуйста, я застрял

<?PHP
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

// set to retunr response=error
$arr = array ('resonse'=>'error','comment'=>'test comment here');
echo json_encode($arr);
?>

//the script above returns this:
{"response":"error","comment":"test comment here"}

<script type="text/javascript">
$.ajax({
    type: "POST",
    url: "process.php",
    data: dataString,
    dataType: "json",
    success: function (data) {
        if (json.response == 'captcha') {
            alert('captcha');
        } else if (json.response == 'error') {
            alert('sorry there was an error');
        } else if (json.response == 'success') {
            alert('sucess');

        };
    }

})
</script>

ОБНОВЛЕНИЕ; * +1010 *

Я изменился
json.response

в

data.response

Но это тоже не сделало его орком

Ответы [ 4 ]

28 голосов
/ 11 августа 2009

Вот сценарий, переписанный для использования приведенных выше рекомендаций и изменения метода без кэширования.

<?php
// Simpler way of making sure all no-cache headers get sent
// and understood by all browsers, including IE.
session_cache_limiter('nocache');
header('Expires: ' . gmdate('r', 0));

header('Content-type: application/json');

// set to return response=error
$arr = array ('response'=>'error','comment'=>'test comment here');
echo json_encode($arr);
?>

//the script above returns this:
{"response":"error","comment":"test comment here"}

<script type="text/javascript">
$.ajax({
    type: "POST",
    url: "process.php",
    data: dataString,
    dataType: "json",
    success: function (data) {
        if (data.response == 'captcha') {
            alert('captcha');
        } else if (data.response == 'success') {
            alert('success');
        } else {
            alert('sorry there was an error');
        }
    }

}); // Semi-colons after all declarations, IE is picky on these things.
</script>

Основная проблема заключалась в том, что в JSON вы возвращали опечатку («резонанс» вместо «ответ»). Это означало, что вы искали неправильное свойство в коде JavaScript. Один из способов решения этих проблем в будущем console.log значение data и убедитесь, что искомая недвижимость там.

Обучение использованию инструментов отладчика Chrome (или аналогичных инструментов в Firefox / Safari / Opera / и т. Д.) Также будет иметь неоценимое значение.

5 голосов
/ 11 августа 2009

Вы должны использовать data.response в своем JS вместо json.response.

4 голосов
/ 11 августа 2009

Ваш массив PHP определен как:

$arr = array ('resonse'=>'error','comment'=>'test comment here');

Обратите внимание на неправильное написание "resonse". Кроме того, как упомянул RaYell, вы должны использовать data вместо json в вашей функции success, потому что ее параметр в настоящее время data.

Попробуйте отредактировать PHP-файл, чтобы изменить форму написания resonse на response. Это должно работать тогда.

0 голосов
/ 03 июля 2012

Ищите этот pitfal: http://www.vertstudios.com/blog/avoiding-ajax-newline-pitfall/

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

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