2013-11-04 33 views
1

我正在爲一個堅持jQuery 1.4.3的站點編寫Ajax代碼。碰巧我的Ajax調用收到一個TCP拒絕(這是可以的,也是項目的一部分)。不幸的是,這個jQuery版本complete永遠不會被調用。使用jQuery 2它可以工作,並且status包含error。我無法更新jQuery版本。

由於TCP拒絕而導致Ajax失敗的代碼能夠修復嗎?

這是我的代碼的一個簡化部分,重現了這個問題。它假定localhost:9999被拒絕。

$(document).ready(function() { 
    $.ajax({ 
     url: 'http://localhost:9999', 
     crossDomain: true, 
     dataType: 'script', 
     complete: function(XMLHTTPRequest, status) { 
      console.log(status); 
     }, 
    }); 
}); 

我成立了一個http://jsfiddle.net/c2Yt6/在那裏你可以測試一下:即使使用jQuery 1.6.4是不工作,但jQuery的2.0.2就可以了。

如何捕獲TCP拒絕錯誤?

回答

0

如果你看一下代碼:http://code.jquery.com/jquery-1.4.3.js

script.onload = script.onreadystatechange = function() { 

這部分應該在你的代碼執行(添加unminified,把一個斷點)

的問題是,事件監聽器函數永遠不會被執行。如果我複製該代碼並添加一行:

script.onerror=function(e){ 
    console.log("some error",e); 
}; 

然後檢測並記錄錯誤。

看起來像jQuery 1.4.3中的錯誤。如果你想要做的是加載腳本,那麼我建議不使用jQuery,但像這樣的代碼:

function loadScript(params){ 
    var s = document.createElement("script"); 
    s.src = params.url; 
    s.onload = function(){ 
    s.parentElement.removeChild(s); 
    params.success(); 
    }; 
    s.onerror = function(){ 
    s.parentElement.removeChild(s); 
    params.error(); 
    }; 
    document.body.appendChild(s); 
}; 
+0

我建議通過的第一個參數'onerror'的處理程序,因爲它包含其中包含有用信息的錯誤事件。 –

+0

@dboehmer你仍然可能需要's.onerror = function(e){e = e || window.event;'IE,但我不確定。 – HMR