我有这样的代码:
$.ajax({
method: "GET",
url: page,
dataType: 'html',
data:data,
success: function(data){
console.log(data);
},
error: function(){
console.log('error');
}
});
使用 Chrome 或 Firefox 的调试器,我可以看到请求成功,响应为 200 OK,并且响应包含预期数据。 然而,我的问题是,没有任何回调触发。 “成功”不会触发,“错误”也不会触发。此外,也不会触发延迟方法,例如“完成”、“然后”或“总是”。
在过去的几个小时里,我一直在尝试解决这个问题,但无济于事。我完全不知所措了。我也尝试过使用诸如“$.get”之类的方法得到相同的结果。
简而言之,我收到了响应,但 jQuery 中的代码没有触发任何回调,并且控制台中没有任何可见错误。
最佳答案
我在您的代码中看到的错误是:
method: "GET",
应该是:
type: "GET",
我在 jQuery 文档中没有看到任何关于 method
的记录属性。 type
属性应该默认为 "GET"
,所以这可能不是这里唯一的错误。
另外,也有即使ajax调用失败也不会调用error
回调的情况(跨域请求)。来自 error
回调的 jQuery 文档:
This handler is not called for cross-domain script and cross-domain JSONP requests.
这是因为 jQuery 期望服务器发回特定形式的 javascript,如果服务器没有执行预期的操作,那么 jQuery 永远不知道请求何时返回并且无法处理它。
在这些情况下,您通常必须通过查看调试器中的网络跟踪来找出可能出了什么问题。
要检查的其他事项以确保您没有意外跨域:
- 确保 ajax 调用和页面之间的域/子域完全相同。例如,一个常见的错误是其中一个包含
www.
而另一个没有。 - 使页面和 ajax URL 都是相同的
http
或https
。 - 如果使用非标准端口号,请确保页面和 ajax URL 使用相同的端口。
关于javascript - jQuery AJAX 请求得到响应但没有回调被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22444109/