在 readystate 0、status 0 和 statusText 错误上跟踪 AJAX 错误

Posted

技术标签:

【中文标题】在 readystate 0、status 0 和 statusText 错误上跟踪 AJAX 错误【英文标题】:Tracking AJAX error on readystate 0, status 0 and statusText error 【发布时间】:2014-09-21 10:11:19 【问题描述】:

我阅读了所有这些类似的问题:1、2、3、4、5 和 6。但我需要调试更多。

所有这些问题都说问题是由于跨域策略引起的,e.preventDefault() 解决了问题。但我怀疑这会破坏其他一些东西,所以我需要确定。

在我的站点中,我有一个每天触发 15k 次的操作。当用户访问网页时,我的 javascript 文件会检查元素。如果元素存在,它会进行 AJAX 调用。

$(document).ready(function() 

    // I do something here

    if ($('#mydiv').length !== 0) 

       var startTime = new Date().getTime();        

       $.ajax(
           type: "POST",
           url: "/mypage",
           success: function (data) 
               // I do something here
           ,
           timeout: 20000,
           error: function(r, s, e) 
               var elapsedTime = (new Date().getTime() - startTime );
               var string = "readyState: "+r.readyState+", status: "+r.status+", statusText: "+r.statusText+", responseText: "+r.responseText+", textStatus: "+s+", error: "+e +", elapsedTime: "+elapsedTime;
               // send this string to server for logging
              formData = string:string;
              $.ajax(
                url : "/mylog",
                type: "POST",
                data : formData
              );
           
       );
     

    // I do something here
);

对于 15k 个请求,大约 70 次用户会收到 AJAX 错误。 ~20 是由于超时。 ~50 是由于未知错误。当我检查客户端的日志时,我看到 AJAX 请求为未知错误提供了这些值:readyState: 0, status: 0 and statusText: error

尽管针对此问题建议使用 e.preventDefault()。我需要知道用户为这个错误做了什么。在我的 javascript 文件中,我没有提出任何跨域请求。但我不知道用户为这个错误做了什么?是否有可能了解更多关于此错误的信息?

注意:我跟踪“AJAX 调用开始”和“AJAX 错误”之间的时间。平均时间为 1500-2000 毫秒。

编辑:如果我使用preventDefault(),我可以把它放在哪里?因为我没有注册点击功能等。

Edit2:This page 这么说:

我们发现,如果 ajax 请求正在获取,则可能会发生这种情况 在完成之前取消。如果我们可以重现这个问题 触发了ajax请求,然后立即点击链接到 离开页面。 jQuery 抛出错误事件时 用户通过刷新或单击离开页面 链接,或更改浏览器中的 URL。

但我无法通过在加载 AJAX 时单击某个链接来重现该问题。

【问题讨论】:

你能弄清楚这个吗?我一直在经历几乎相同的情况,其中看似随机的请求以您的速率或稍高的速率失败,statusText=error 和 status=0。谢谢! 我可以在 ajax 加载期间按 Esc 键重复此错误。当我按 Esc 键时,ajax 停止并发生错误。 【参考方案1】:

解决了。

我遇到了同样的问题。 ajax调用后有重定向时会出现此问题。

破解密码:

$.ajax(
                url: '',
                dataType: 'jsonp',
                success: function (json) 
                    // do stuff here
                ,
                error: function (error) 
                    // do stuff here
                
            );

 window.location.href = "www.google.com";

在上面的代码中,在 ajax 之后有一个重定向,它给出了就绪状态 0 的错误。

解决方案: 得到一些回应后写重定向。我写的完整。

$.ajax(
                url: '',
                dataType: 'jsonp',
                success: function (json) 
                    // do stuff here
                ,
                error: function (error) 
                    // do stuff here
                ,
                complete: function () 
                    window.location.href = "www.google.com";
                
            );

【讨论】:

以上是关于在 readystate 0、status 0 和 statusText 错误上跟踪 AJAX 错误的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax readystate 0 responsetext status 0 statustext 错误

jquery ajax 错误 "readyState":0,"responseText":"","status":0,&

XMLHttpRequest对象的readyState和status区别

iOS CORS ajax 请求 readyState 0

AJAX请求时status返回状态明细表 readyState的五种状态

AJAX请求时status返回状态明细表 readyState的五种状态