我已经为ajax / post / update函数启动了以下框架我想用javascript编写(使用jquery):
$.post("/gallery/resize",
function (data) {
alert(data);
alert(data.complete);
if (data.complete) {
alert("done");
} else {
alert("blah");
}
},
"json"
);
服务器上的响应脚本是:
$return['complete'] = 'complete';
header('Content-type: application/json');
echo json_encode($return);
exit;
FireBug控制台显示我得到了一个JSON字符串作为响应 - 但data.complete的值是'undefined'。以下是FireBug报告的服务器字符串(我在控制台的XHR显示下的JSON选项卡下也有相应的值/数据对):
{"complete":"complete"}
关于我可能错过的任何指示...
我正在使用本地主机服务器 - 在ubuntu上使用apache - 如果这有所不同?
答案 0 :(得分:5)
奇怪的是,回调在没有设置前面的数据参数的情况下工作 - 但是当你想设置数据类型(并且必须设置数据和回调)时它会变得怪异。
所以 - 我想要的正确代码是:
$.post("/gallery/resize", "",
function (data) {
alert(data);
alert(data.complete);
if (data.complete) {
alert("done");
} else {
alert("blah");
}
},
"json"
);
答案 1 :(得分:2)
我不确定jQuery如何解析JSON数据,但可能是JSON字符串被错误地评估了。如果在FireBug控制台中输入{"complete":"complete"}
,则会将其解释为块语句而不是对象文字("complete"
属性名称将被评估为标签)。通过评估({"complete":"complete"})
或{complete:"complete"}
或使用JSON.parse
上的{"complete":"complete"}
来解决此问题。解决此问题的最快方法是从"json"
调用中删除$.post
参数并解析自己的数据,如下所示:
$.post("/gallery/resize",
function (data) {
var obj;
if (JSON.parse) {
obj = JSON.parse(data);
} else {
obj = eval("(" + data + ")"); // obligatory eval() warning
}
if (data.complete) {
alert("done");
} else {
alert("blah");
}
}
);
顺便提一下,如果您正在使用Firebug进行调试,请始终尝试使用console.log
而不是alert
- 它不会中断JS的执行,并且它提供了比{更多信息丰富的JSON序列化{ {1}}
答案 2 :(得分:1)
试试这个:
header('Content-Type: application/json');
$return = array('complete' => 'complete');
echo json_encode($return);
exit;
答案 3 :(得分:1)
JSON数据就像一个javascript数组。所以你应该访问它。
因此,在您提供的代码中,您应该以这种方式访问“完成”条目:
data.items[0].complete
这应该可以解决问题。
You may look here获取更多jQuery / JSON信息。