【问题标题】:Ajax Timeout Not Working and Not Showing "Timeout" StatusAjax 超时不工作且不显示“超时”状态
【发布时间】:2013-06-25 14:03:58
【问题描述】:

当单击按钮时,我正在尝试在提交表单之前对其进行连接检查。想法是查看尚未在此代码中实现的超时请求“Timeout()...”,并继续遍历 Ajax 直到找到连接,因为有时在现场连接可能会断开。当找到连接时,它会提醒用户,如果在点击提交后连接断开,它将成功提交。这是我目前所拥有的:

function upload_prepformDiff() {
$.ajax({
        type: 'POST',
        url: './php/upload_prepform.php',
        timeout: 2000, //2 seconds, for testing purposes
        data: prepform,
        async: false,//Omitted now as of this post
        dataType: 'text',
        success: function() {
            alert("Your Prep form has been submitted.");
            window.top.location.replace('./');
        },

        error: function (xhr, status, error) {
            if(status == "timeout") {
                alert("Internet connection has been lost! Please wait until you are notified and do not continue.");
            } else {
                alert(status + " " + error);
            }
        }
});
};

问题是,即使超时值较低,我也没有收到“超时”状态消息,而是收到“错误”。所以它永远不会抛出我需要的超时错误,并且我得到错误:错误:NETWORK_ERR:XMLHttpRequest Exception 101

所以 ajax 确实注意到没有连接,但这就是 errorThrown 显示的内容,而 textStatus 分别是 (xhr, status, error) 的“错误”。所以我尝试做的是做一些即兴创作并做某种类型的 error.indexOf() 处理 Ajax 中抛出的错误字符串,但这不起作用,error.contains("NETWORK_ERR") 或任何类型的正则表达式命令。有什么改进的想法或为什么我没有超时?谢谢!

【问题讨论】:

  • 为什么使用async: false?另外,你确定错误回调是ajax请求超时触发的,还是服务器端有错误?
  • 啊,我一定是在发帖前的最后一秒改变了一些东西,忘了改回来。至于 async false,我这样做是因为我使用的是全局变量,例如 //Global variables var prepform = { 'cable_no' : "", 'prep_date' : "", 'co_name' : "" } 然后遍历那些全局变量HTML 中的变量 for (eID in prepform) { prepform[eID] = document.getElementById(eID).value; //alert(prepform[eID]+': '+document.getElementById(eID).value);和 async: false 是 ajax 正确触发以传递所有数据的唯一方法。
  • @jflay:这不是使用async: false 的理由。完全可以执行启用异步的循环。
  • @BradM 我也获得了成功并通过连接上传到我的 SQL 数据库,所以那里没有错误,但只有当我没有任何连接时,我才会收到错误,我期望一个“超时”,但我得到“错误”。我确实为 Ajax 请求调用了 PHP,所以我可能因为 Ajax 无法访问 Ajax URL 请求中的那个 PHP 文件,所以它会抛出错误?我不知道如何改变它......我只是想要某种方式告诉用户他们没有连接。我收到了正确的错误消息,但不知道状态是什么...

标签: javascript ajax timeout


【解决方案1】:

我想这对你来说可能有点晚了,但是……

如果你指定了

异步为“假”

,超时属性将被忽略。

至于处理错误,您可以访问之前的 SO question: status of ajax or post request

希望这会有所帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-05-05
    • 2012-08-07
    • 1970-01-01
    • 2012-08-13
    • 2017-06-19
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多