2012-04-25 74 views
2

我使用POST方法發送ajax XMLHttpRequest。發送請求時,我得到一個狀態爲12030的readyState。我知道12030是一個Microsoft特定的狀態碼,表示連接沒有持續。但是,我似乎無法找到我的代碼會導致此錯誤。如果我在不使用ajax請求的情況下導航到頁面,它會正常加載。以下是javascript方法和呼叫線。AJAX狀態12030

AJAX方法

/*Sends ajax request with post data that updates the content view via ajax on completion 
* @param message : message after completion of ajax request 
* @param url : url to request 
* @param params : post parameters as string 
*/ 
function changeAjaxPost(message, url, params) { 
    var ajx; 
    if (window.HXMLHttpRequest) { 
     UtilLogger.log(HtmlLogger.FINE, "Using XMLHttpRequest"); 
     ajx = new XMLHttpRequest(); 
    } 
    else { 
     UtilLogger.log(HtmlLogger.FINE, "Using ActiveXObject"); 
     ajx = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    ajx.open("POST", url, true); 
    ajx.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
    ajx.setRequestHeader("Content-Type", "text/html"); 
    ajx.setRequestHeader("Content-length", params.length); 
    ajx.setRequestHeader("Connection", "close"); 
    ajx.send(params); 
    ajx.onreadystatechange = function() { 
     document.write(ajx.readyState + ":" + ajx.status); 
     if (ajx.readyState == 4 && ajx.status == 200) { 
      alert(message); 
      updateContent(); 
     } 
     else if (ajx.readyState == 4 && ajx.status == 400) { 
      alert("Page Error. Please refresh and try again."); 
     } 
     else if (ajx.readyState == 4 && ajx.status == 500) { 
      alert("Server Error. Please refresh and try again."); 
     } 
    } 

} 

呼叫熱線

changeAjaxPost("Excerpt Saved", "./AJAX/myadditions_content.aspx", params); 
+0

我確實不明白爲什麼人們仍然使用普通的JS來做Ajax。 jQuery將簡化你的生活! http://api.jquery.com/jQuery.ajax/ – Dutchie432 2012-04-25 15:33:15

+0

你會不斷地或隨機地得到這個ajax錯誤嗎? ajax通話需要多長時間? – 2012-04-25 15:36:06

+0

@ Dutchie432這並不總是一種選擇。公司可以授權它(discovercard.com很長一段時間),或者你可能正在開發一個框架不可知的庫。 – 2012-04-25 15:47:45

回答

0

有時,使用

setRequestHeader("Connection","close"); 

可能會導致在某些瀏覽器的問題。

刪除可以解決問題。

幸得@MikeRobinson

1

http://danweber.blogspot.com/2007/04/ie6-and-error-code-12030.html

IE6和錯誤代碼12030 如果您正在運行Internet Explorer 6和使用Ajax,你可能會得到一些XMLHttpRequest的終止代碼12030. 微軟在知識庫http://support.microsoft.com/kb/193625顯示此代碼是

12030 ERROR_INTERNET_CONNECTION_ABORTED 與服務器的連接已終止。 谷歌搜索沒有幫助;遇到這種情況的人似乎並沒有意識到網絡套接字是如何工作的,所以我必須親自實現它。

當客戶端認爲連接一直處於打開狀態時,會發生這種情況,並且服務器將其關閉。服務器發送了一個FIN,並且客戶端已用ACK作出響應。在Windows客戶端上運行「netstat」會顯示連接處於CLOSE_WAIT狀態,所以IE6真的應該在嘗試之前就已經實現了。這完全是客戶的錯。如果您等待大約60秒鐘,則Windows操作系統堆棧將退出連接。

如果您需要支持IE6,你有一些解決方案,在不同程度的醜陋:

重試Ajax請求中的出錯代碼12030 如果瀏覽器是IE,發送一個空請求到服務器在每個ajax請求之前 捆綁您的ajax請求,以使它們之間的時間爲((大於server_timeout)AND(小於server_timeout +一分鐘) IE7,fwiw將在它立即通過CLOSE_WAIT套接字時發出RST意識到它有一個外出的連接,那麼,socket將只能保持在CLOSE_WAIT狀態大約5秒鐘,不管怎樣,