我有一个奇怪的问题,我无法弄清楚。我太容易出错了。 问题出现在Chrome 12.0.742.91中,但在IE8 8.0.6001.19048中可以正常工作。
这是我的AJAX回调函数,this
是XMLHttpRequest实例。
// default AJAX callback handler
function Handler() {
if (this.readyState == 4 && this.status == 200) {
// alert(">>"+this.responseText+"<<");
var Response = this.responseText;
// Response = '{"Status":0,"Data":"My Data"}';
document.getElementById("debug").innerHTML = Response;
var Ajax = JSON.parse(Response);
document.getElementById("Stat1").innerHTML = Ajax.Status+"<br />"+Ajax.Data;
}
AJAX服务器正在发送{"Status":0,"Data":"Server Data"}
,这在debug
元素中显示完全相同; Server Data
。
header('Content-type: application/json');
print '{"Status":0,"Data":"Server Data"}';
警告(...)显示>>{"Status":0,"Data":"Server Data"}<<
,JSON数据前面或后面没有多余的空格。
但是当用JSON.parse()解析时,我收到一个javascript错误:非法令牌。
但是,如果我硬编码相同的字符串(激活标记的行),JSON.parse()可以正常工作,并在My Data
元素中显示数据(stat1
)。
在IE8中,Server Data
版本完美无缺......
我是否忽视了一些基本内容,或者Chrome存在已知问题?
[编辑] 根据请求,您将在此处找到XMLHTTPRequest实例创建:
// Create the XMLHttpRequest object
function GetHTTPRequestObject() {
var httpRequest = null;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
httpRequest = new XMLHttpRequest();
} else {// code for IE6, IE5
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
return httpRequest;
}