我有一个奇怪的问题,无法解决。它太简单了,不可能出错。
这个问题在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":"服务器数据"}
,并且这将在debug
元素中完全相同地显示为服务器数据
。
header('Content-type: application/json');
print '{"Status":0,"Data":"Server Data"}';
alert(...)
显示的是 >>{"Status":0,"Data":"Server Data"}<<
,JSON 数据前后没有额外空格。
但是当使用 JSON.parse()
解析时,会出现 JavaScript 错误: Illegal token。
然而,如果我硬编码相同的字符串(激活注释行),JSON.parse()
就能正常工作,并在 stat1
元素中显示数据 (My Data
)。
在 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;
}
alert(Response);
显示什么?它显示正确的字符串吗?可能是"
导致了错误。 - Praveen Lobovar Response = ...
行下面添加alert('{"Status":0,"Data":"Server Data"}' === Response);
是 true 还是 false? - James Khoury