0

当单击按钮时,我正在尝试在提交表单之前对其进行连接检查。我们的想法是查看尚未在此代码中实现的超时请求“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") 或任何类型的正则表达式命令。有什么改进的想法或为什么我没有超时?谢谢!

4

1 回答 1

2

猜猜这对你来说可能有点晚了,但尽管如此......

如果您已指定

异步为“假”

,超时属性将被忽略。

至于处理错误,您可以访问更早的 SO 问题: ajax 或发布请求的状态

希望这可以帮助!:)

于 2013-12-09T03:39:42.007 回答