2011-04-19 71 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%的時間。