它再次深夜,我正撞在墙上。
我有一个jquery ajax调用:
function waitForMsg(){
$.ajax({
type: "GET",
url: "backend.php",
async: true,
cache: false,
dataType: 'json',
timeout: 50000, /* Timeout in ms */
data: "TimeStamp=" + TimeStamp,
success: function(data){
var json = eval('(' + data + ')');
$('#TextHistory :last-child').after('<p>' + json.message + '</p>');
TimeStamp = json['timestamp'];
setTimeout(
waitForMsg, /* Request next message */
5000 /* ..after 5 seconds */
);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
$('#TextHistory :last-child').after('<p>' + errorThrown + '</p>');
setTimeout(
'waitForMsg()', /* Try again after.. */
"15000"); /* milliseconds (15seconds) */
},
});
};
到backend.php,目前看起来像:
<?php
header('Content-Type: application/json');
$response = array();
$response["message"] = "Blarde Bar Blar";
$response["timestamp"] = $LastMsgUpdated; // part of bigger script this is taken from.
echo json_encode($response);
?>
...但是当ajax成功函数运行时,我在firebug中得到一条消息,说“json.msg为null”......当我在监视窗口中查看json对象时,它显示为null。我正在努力学习这一点,所以不确定我是在做一些有趣的事情,或者我是否只是错过了一些愚蠢的事情。我还注意到firebug中没有任何响应头。当他们明显位于backend.php的顶部时,怎么会这样呢......这么奇怪,让我的头受伤......需要睡觉。
提前感谢您的帮助。 丹
答案 0 :(得分:2)
当您将data
选项设置为dataType
时,传递给回调的json
已经是JavaScript对象:
“json”:将响应评估为JSON并返回JavaScript对象。在jQuery 1.4中,JSON数据以严格的方式解析;任何格式错误的JSON都会被拒绝,并抛出一个解析错误。 (有关正确的JSON格式的更多信息,请参阅json.org。)
所以这一行会产生垃圾:
var json = eval('(' + data + ')');
(我在Chrome中遇到SyntaxError: Unexpected identifier
错误
将其删除并使用data.message
。
除此之外,请勿使用eval
来解析JSON数据there are better methods available。
答案 1 :(得分:0)
此时你的json实际上被称为数据:
$('#TextHistory :last-child').after('<p>' + json.message +
这是由于:
function(data){
所以你应该像这样访问它:
$('#TextHistory :last-child').after('<p>' + data.message +