2011-04-19 84 views
1

我懒惰加载我们的页面上的html片段,以提高性能。 jQuery的加载方法不提供对完整ajax api的访问(像错误回调之类的东西),所以我创建了一个更强大的版本。jquery 1.5.1,asp.net和firefox间歇性ajax故障

我在每页上调用这个方法每页3-5次,并且当有一个AJAX调用出现某种错误时记录。我发现大约有0.3%的时间ajax调用失败,大部分失败都在firefox 3.6中。我在ASP.NET服务器端使用jQuery 1.5.1。错误回调的 'errorThrown' 参数读取:

[异常... “组件返回失败代码:0x80040111(NS_ERROR_NOT_AVAILABLE)[nsIXMLHttpRequest.getAllResponseHeaders]” nsresult: “0x80040111(NS_ERROR_NOT_AVAILABLE)”

和jqXHR写着:

{“readyState的”:4,“状态”:0,“状态文本”:“错误”}

我已确认有用户他们正在experienceing这个问题,它不只是僵尸网络或一些记录无经验的错误。

这里是我的 “负荷” 插件的代码

(function ($) { 
    $.fn.elfLoad = function (url, options) { 

     return this.each(function() { 

      var $elem = $(this); 

      options = $.extend({}, { 
       type: "GET", 
       dataType: "html", 
       data: "", 
       error: function (jqXHR, status, errorThrown) { 

        $elem.html('<div class="elf-missing-content centerText">Doh! Something did not go so well when trying to load this content. Please try again later.'); 
        elf.ajax.logInfo("data: " + options.data + " errorThrown: " + errorThrown + " webmethod: " + options.url + "jqXHR: " + JSON.stringify(jqXHR),"elfLoad"); 
       } 
      }, options); 

      options.success = function (data, status, jqXHR, responseText) { 

       responseText = jqXHR.responseText; 

       if (jqXHR.isResolved()) { 

        jqXHR.done(function (r) { 
         responseText = r; 
        }); 

        $elem.html(responseText); 
       } 

       if (options.callback) { 
        var callbackArgs = { 
         responseText: responseText, 
         $elem: $elem, 
         status: status, 
         jqXHR: jqXHR 
        }; 
        $elem.each(options.callback, [callbackArgs]); 
       } 


      } 

      options.url = url; 

      if (options.data) { 
       options.data = $.param(options.data, $.ajaxSettings.traditional); 
       options.type = "POST"; 
      } else { 
       options.data = ""; 
      } 

      $.ajax(options); 
     }); 
    } 
})(jQuery); 

对它的调用看起来像这样$( '#集装箱')elfLoad( 'url.aspx',{FOO:“酒吧“});

有没有其他人有这个问题?有任何想法吗? jQuery声称最近关闭了一张看起来像1.5.1这样的票,但我看到其他人有类似的问题。 http://bugs.jquery.com/ticket/8400

谢谢!

回答

1

我最终解决了这个问题,使用setTimeout 2秒并重试请求。到目前为止,这是100%的时间。