【问题标题】:Timeout not working in ajax post request超时在ajax post请求中不起作用
【发布时间】:2014-08-20 03:40:02
【问题描述】:

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

有什么办法吗?

【问题讨论】:

  • RTT 到http://mydomain/Services.asmx/Best_Scores 需要多长时间?也许网址根本不会超时?
  • @Amberlamps : 谢谢回复,我需要 15-20 秒!
  • 您是否尝试在错误函数中警告 if 语句中没有的内容?也许textStatus 不是“超时”?!

标签: javascript jquery ajax html


【解决方案1】:

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

我的 ajax 调用太长(取决于日期开始-> 日期结束)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){
...

我使用以下方法解决了: PHP端:

set_time_limit(0);
ignore_user_abort(true);

在脚本的开头。

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

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

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

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

我希望这对某人有所帮助。

【讨论】:

  • 已接受的答案对我不起作用,但这个答案完成了。 @Mago Maverick 谢谢你
【解决方案2】:

修复:

async : false 更改为async: true

原因:

在请求完成之前,同步 AJAX 调用会阻塞。由于技术原因,无法实现超时,因为 AJAX 调用必须稍后执行。

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

【讨论】:

  • 在 JQuery 文档中的任何地方都提到过这个吗?我找不到它。
  • 不确定...但毕竟 SO 是开发人员的最终目的地?
猜你喜欢
  • 2016-11-05
  • 2021-12-24
  • 1970-01-01
  • 2012-04-07
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多