【问题标题】:jquery ajax call abortsjquery ajax 调用中止
【发布时间】:2011-05-03 16:10:46
【问题描述】:

我需要对将处理数据并显示结果的 php 脚本进行一些 ajax 调用。

但是呼叫似乎超时了。在 Chrome 和 Firefox 中,当我检查它们以红色显示的呼叫时。

我的 ajax 代码:

$.ajax({
    type: "POST",
    url: "/toimport",
    data: ({"filename": $("#file").val(), "search_engine": $("#engine").val(), "matchtype": $("#matchtype").val(), "year" : $("#year").val(), "country" : country, "sheet" : i, "filetype": file_type}),
    success: function(data, textStatus, jqXHR){
        $("#message").append(data);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown){
        $("#message").append(textStatus + '<br />');
    }
});

当我使 PHP 代码变得微不足道时(返回接收到的值之一),所有调用都成功,只有当 PHP 需要一些时间时,ajax 调用才会失败。

我尝试在 ajax 调用上使用超时,但它似乎不起作用。返回的 textStatus 为 'error',errorThrown 为空。

谢谢

【问题讨论】:

  • 检查响应标头以查看服务器返回的内容(即 firebug)作为错误代码。您的完整 php 脚本可能引发 500 内部服务器错误。大多数情况下,服务器会真正响应错误。
  • 我没有得到那些失败的调用的响应头。

标签: jquery ajax timeout


【解决方案1】:

您可以这样处理您的 AJAX 调用:

var ajaxCall = $.ajax(options);

如果您有对 AJAX 调用的引用,则可以中止调用:

ajaxCall.abort();

您需要进行额外验证以了解您的 AJAX 调用是否已完成或仍在工作,以避免您的 abort 请求出现任何错误。

【讨论】:

  • 如何进行验证?
  • 每个 ajax 调用都有像“readyState”这样的属性,可以是“1”、“4”等等。因此,您需要在中止 ajax 调用时知道这还没有完成,因为这可能会抛出异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多