【发布时间】:2011-04-06 17:16:45
【问题描述】:
你好,我注意到这个简单的代码并没有按照它应该的方式工作......
function test() {
$.ajax( {
'url' : 'test/GameConfiguration.json',
'dataType' : 'json',
data : {
a : 'aaa'
},
cache : false,
method : 'get',
timeout : 10000, //10 secs of timeout
success : function(data, textStatus, XMLHttpRequest) {
console.log("success");
if (data == null)
console.log("it's not a real success");
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
console.log("error: " + textStatus);
}
});
}
测试已经在本地主机上运行,我的意思是:我加载页面,我关闭本地网络服务器,然后我触发请求(通过一个简单的按钮,onclick 指向这个函数)。永远不会调用错误,我得到的是调用成功处理程序,它有 textStatus = "success" 和 data = null。我什至注意到请求在 10 秒之前就超时了。 这发生在 Firefox(最新版本)、Chrome(最新版本)和 Safari 5 上。为什么会这样?是因为我在 localhost 上工作吗?
我忘了说:请求没有被缓存。事实上,firebug 和 Chrome 开发工具都显示请求失败。
重大更新
此行为与 localhost 的使用有关。事实上,如果我从另一台同事 PC 加载此页面,并且在触发请求之前我断开我的 PC 与网络的连接,我正确地得到了错误处理程序,并以超时作为状态触发。我认为这是 jQuery 的一个错误。这会让我很难测试超时错误:(
来自 jQuery 论坛的人说这是由于网络堆栈中止连接的方式,因为主机是 localhost。我仅在 Windows 7 上对此进行了测试。如果您想在其他系统上进行测试,并且可以解决一些 jQuery 内部问题,请在 jQuery 论坛上报告此帖子:
【问题讨论】:
-
为什么将
'url'和'dataType'引用为字符串? -
我尝试删除引号:没有区别
-
你能展示一个演示页面吗?
-
@Codesleuth。必须引用“url”和“dataType”才能成为有效的 JSON 对象。它还允许您使用“this”、“true”、“undefined”等保留关键字作为属性名称。现在,我知道 OP 发布的内容并不是真正的 JSON……但它仍然是有效的。我实际上更喜欢在我的 JS 对象中引用属性。
-
@David Murdoch 我想你没抓住我的意思。只引用了两个属性名称 - 我正在询问为什么它不是跨代码的统一做法。