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

时间:2014-06-29 17:59:37

标签: javascript jquery ajax html5

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

任何解决方案?

2 个答案:

答案 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是有效的。

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

我希望这对某人有帮助。