繁体   English   中英

超时无法在ajax post请求中工作

[英]Timeout not working in ajax post request

我无法在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");
    }
  }
});

有解决方案吗

修复:

async : false更改为async: true

原因:

同步AJAX调用将阻塞,直到请求完成。 由于技术原因,无法实现超时,因为以后必须执行AJAX调用。

如果稍后执行AJAX调用,该函数必须以某种方式实现阻塞功能,以阻止代码在AJAX调用后进​​一步运行,并在超时后再次执行 - 不可能。

今天(2019年),我仍然有这个问题。

我有一个ajax调用太长时间(取决于Date Start-> Date End)php脚本。

几分钟后我得到错误500,async:true没有帮助。

电话是:

$.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){
...

我决定使用:side PHP:

set_time_limit(0);
ignore_user_abort(true);

在脚本开始。

echo ' ';
flush();
ob_flush();

在脚本中间(例如每天在主循环中)。 这有助于让客户端不要断开连接(我认为这是主要问题)。

使用这个我继续为最终的json写空格。 幸运的是,jquery在解析json之前修剪了空格,最后,json是有效的。

所以我可以捕获响应对象,以了解脚本是否以错误或警告结束。

我希望这能帮助别人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM