如何从jquery脚本中将jSON响应转换为变量

时间:2009-08-11 17:10:25

标签: jquery ajax json

我在下面的jquery脚本遇到问题,这是一个基本的精简版本,即使它不起作用,我有jquery脚本调用的php文件,我将它设置为编码并显示json回应

然后在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>

UPDATE;

我已经改变了 json.response

进入

data.response

但这并没有让它成为ork

4 个答案:

答案 0 :(得分:28)

这是脚本,重写以使用上面的建议和更改你的无缓存方法。

<?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,并确保您所寻找的房产就在那里。

Learning how to use the Chrome debugger tools(或Firefox / Safari / Opera等中的类似工具)也非常宝贵。

答案 1 :(得分:5)

您应该在JS中使用data.response而不是json.response

答案 2 :(得分:4)

您的PHP数组定义为:

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

请注意拼写错误“resonse”。另外,正如RaYell所提到的,您必须在data函数中使用json而不是success,因为其参数目前为data

尝试编辑PHP文件,将拼写格式resonse更改为response。它应该工作。

答案 3 :(得分:0)

留意这个陷阱: http://www.vertstudios.com/blog/avoiding-ajax-newline-pitfall/

在我发现所包含的文件中有一些换行符之前几个小时进行了搜索。