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

时间:2014-07-29 21:42:12

标签: javascript jquery ajax

我读了所有这些类似的问题:123456。但我需要调试更多。

所有这些问题都表明问题是由跨域政策和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 call start”和“AJAX error”之间的时间。平均时间为1500-2000毫秒。

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

Edit2:This page说:

  

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

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

1 个答案:

答案 0 :(得分:4)

解决。

我遇到了同样的问题。在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";
                }
            });