我无法在3秒后制作ajax错误回调函数。我尝试了超时,但在指定的时间后它不会切换到错误回调!我无法收到提醒Got timeout
。
当我在本网站提到类似问题的类似问题时,它没有帮助。它们都使用ajax GET类型。我正在使用jquery 1.10.1库。
脚本:
$.ajax({
type: 'POST',
timeout: 3000,
url : "http://mydomain/Services.asmx/Best_Scores",
dataType: "text",
async:false,
crossDomain:true,
data: "strJsonRequest="+scoredata,
success: function (data) {
// Success code ...
},
error: function (data, textStatus, errorThrown) {
if(textStatus == "timeout") {
alert("Got timeout");
}
}
});
任何解决方案?
答案 0 :(得分:14)
修复:
将async : false
更改为async: true
原因:
同步AJAX调用将阻塞,直到请求完成。由于技术原因,无法实现超时,因为AJAX调用必须稍后执行。
如果稍后执行AJAX调用,该函数必须以某种方式实现阻塞功能,以阻止代码在AJAX调用后进一步运行,并在超时后再次执行 - 不可能。
答案 1 :(得分:0)
今天,(在2019年)我仍然遇到这个问题。
我的ajax调用时间太长(取决于Date Start-> Date End)php脚本。
几分钟后,我收到错误500,异步:是的,没有帮助。
电话是:
$.ajax({
type: "GET",
dataType: 'json',
url: 'mymscript.php',
contentType:'application/json;charset=UTF-8;',
data: $('[name="myForm"]').serialize(),
async:true,
timeout:0,
success: function(response){
...
我决定使用: 侧面PHP:
set_time_limit(0);
ignore_user_abort(true);
在脚本开头。
echo ' ';
flush();
ob_flush();
在脚本中间(例如每天在主循环中)。这有助于让客户端不断开连接(我认为这是主要问题)。
使用此方法,我在最终json之前连续写空格。 幸运的是,jQuery在解析json之前先修剪了空格,最后json是有效的。
因此,我可以捕获响应对象以了解脚本是否以错误或警告结尾。
我希望这对某人有帮助。