当前位置: 首页 > 面试题库 >

jQuery $ .ajax,错误处理程序不起作用

段超
2023-03-14
问题内容

您好,我注意到,这个简单的代码无法正常工作……

    function test() {
    $.ajax( {
        'url' : 'test/GameConfiguration.json',
        'dataType' : 'json',
        data : {
            a : 'aaa'
        },
        cache : false,
        method : 'get',
        timeout : 10000, //10 secs of timeout 
        success : function(data, textStatus, XMLHttpRequest) {
            console.log("success");
            if (data == null)
                console.log("it's not a real success");
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            console.log("error: " + textStatus);
        }
    });
}

该测试已在localhost上运行,我的意思是:我加载页面,关闭本地Web服务器,然后触发请求(通过一个简单的按钮,其中onclick指向此功能)。错误永远不会被调用,我得到的是调用成功处理程序,它具有textStatus
=“ success”和data = null。我什至注意到请求在10秒之前就超时了。在Firefox(最新版本),Chrome(最新版本)和Safari
5上会发生这种情况。为什么呢?是由于我在本地主机上工作吗?

我忘了告诉:请求没有被缓存。实际上,firebug和Chrome开发人员工具都显示请求失败。

大更新

此行为与本地主机的使用有关。实际上,如果我从另一台同事PC加载此页面,并且在触发请求之前我已断开PC与网络的连接,则可以正确获取以超时为状态​​触发的错误处理程序。我认为这是jQuery的错误。这将使我很难测试超时错误:(

jQuery论坛的家伙说这是由于网络堆栈中止连接的方式(假设主机是localhost)。我仅在Windows
7上测试过。如果您想在其他系统上进行测试,并且可以解决一些jQuery内部问题,请在jQuery论坛上向此职位举报:

http://forum.jquery.com/topic/strange-and-unexpected-behaviour-of-ajax-error-
and-localhost#14737000001331961


问题答案:

更新 :尝试将测试替换(data == null)(XMLHttpRequest.readyState === 4 && XMLHttpRequest.status === 0)

在有关XMLHttpRequest标准的W3C候选推荐中,描述了它必须存在,因此命名为“错误标志”,该标志应用于指示某种类型的网络错误或中止。如果发生此类错误,状态XMLHttpRequest为0,而不是200(“确定”),201(“已创建”),304(“未修改”)等等。要完全对应于http://www.w3.org/TR/XMLHttpRequest/#the-
status-attribute
XMLHttpRequest.status,如果XMLHttpRequest.readyState等于0或1(“未发送”或“已打开”),则可以为0
。另一种情况XMLHttpRequest.readyState等于4(“完成”),并且“错误标志”为true。如果我们没有这两种情况,则XMLHttpRequest.status必须为HTTP状态代码。在http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html下或http://www.w3.org/Protocols/HTTP/1.0/spec.html#Status-
Codes没有等于0的HTTP状态代码。所以在我看来,您可以执行以下操作

jQuery(document).ready(function () {
    $.ajax({
        type: 'GET',
        url:  'test/GameConfiguration.json',
        dataType: 'json',
        cache : false,
        success: function(data, textStatus, xhr){
            if (xhr.readyState === 4 && xhr.status === 0) {
                // if readyState is DONE (numeric value 4) then corresponds to
                // http://www.w3.org/TR/XMLHttpRequest/#dom-xmlhttprequest-done
                // "The DONE state has an associated error flag that indicates
                // some type of network error or abortion."
                // Corresponds to http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute
                // If error flag it true, xhr.status is 0.
                alert('"error flag\" is true. It means that we have a network error"+
                      " or abortion (for example because of Same Origin Policy restrictions)');
            }
            else {
                alert(textStatus);
                alert(data);
            }
        },
        error: function(xhr, textStatus, errorThrown) {
            if (textStatus !== null) {
                alert("error: " + textStatus);
            } else if (errorThrown !== null) {
                alert("exception: " + errorThrown.message);
            }
            else {
                alert ("error");
            }
        }
    });
});


 类似资料:
  • 问题内容: 我已经在这里搜索了问题,但是我对如何在jQuery的AJAX中使用错误处理没有很好的了解(我是菜鸟,所以这真的没有意义。) 有人可以向初学者描述吗?我目前正在通过AJAX将信息发布到PHP脚本,但希望允许jQuery识别从脚本返回的数据是错误还是成功。 谢谢!戴夫 问题答案: 从ajax调用返回的错误是从不成功的页面加载返回结果。可能是您的php页面返回了一个有效的页面,但是结果不是您

  • 本文向大家介绍如何处理jQuery AJAX错误?,包括了如何处理jQuery AJAX错误?的使用技巧和注意事项,需要的朋友参考一下 处理jQuery AJAX错误。每当AJAX请求失败时,ajaxError(callback)方法都会附加一个要执行的函数。这是一个Ajax事件。 这是此方法使用的所有参数的描述- callback- 要执行的功能。用于该请求的XMLHttpRequest和设置将

  • 问题内容: 当我的网站是100%jQuery时,我曾经这样做: 为401错误设置全局处理程序。现在,我将angularjs与和一起使用,以向服务器发送(REST)请求。有什么办法可以类似地用角度设置全局错误处理程序吗? 问题答案: 我还在建立一个带有angular的网站,并且遇到了同样的障碍来处理全局401。当我遇到此博客文章时,我最终使用了HTTP拦截器。也许您会发现它和我一样有用。 “基于An

  • 问题内容: 我最近在愚弄一些Ajax轮询技术。但是,似乎我无法从FireFox(3.6.7)中的对象覆盖处理程序。 在跟踪为什么FF在尝试访问时引发异常的问题时,我意识到这取决于是否调用了该方法。 换句话说,这是一个有效的示例(纯js,到目前为止没有jQuery): (这只是为了演示而进行了相当简化) 更好的说是可行的,可以在这里访问。如果我切换最后两行代码,FF会引发异常,基本上是告诉我不允许访

  • 问题内容: 我使用bassistance.de的jQuery验证程序插件(1.11)并通过php提交。现在,我在javacript代码的末尾的提交处理程序中添加了一个ajax调用,但是该调用不起作用,firebug控制台也不存在。 案例1 如果我在网站的开头放置了ajax调用,它可以工作,但是不再可以看到验证器插件。 案例2 如果我将调用放入提交处理程序中,则该调用不存在,并且表单由php提交。

  • 问题内容: 我想为ajax调用提供一种全局错误处理方法,这就是我现在所拥有的: 我需要忽略的错误。为null,为。我该如何检查? 问题答案: 我今天不得不处理相同的用例。我正在处理的应用程序具有这些长时间运行的ajax调用,这些调用可能会因1)用户导航离开或2)某种临时连接/服务器故障而中断。我希望错误处理程序仅针对连接/服务器故障而不是用户导航运行。 我首先尝试了Alastair Pitts的答