2010-08-09 110 views
2

我是這個網站的新手,並且已成功使用「HTML5」跨源資源共享(CORS)將數據發佈到我的服務器。我最近試圖將GET包括進來,因爲我們試圖讓所有通信都不依賴於JavaScript庫。在這樣做的過程中,我遇到了一個奇怪的問題,對於Firefox來說似乎有點可修復,但在所有WebKit瀏覽器中仍然存在不當行爲。基本上任何返回狀態爲< 200或> 300的狀態都會以0的狀態進入。這使得幾乎不可能進行錯誤處理。使用HTML5進行跨源資源共享的問題

對於Firefox,我可以把一個隨機字符串,以防止它被緩存的請求結束;從而至少固定304。但在Chrome/Safari中,這對我來說完全不起作用。以下是我的代碼示例:

xhr_request: function(type,url, data, callbacks, form){ 
    var form = (typeof(form)!=="undefined")?form:null; 
    var xhr = new XMLHttpRequest(); 
    var response; 
    data = com.ticommunity.obj_to_string(data); 
    xhr.open(type, url, true); 
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    xhr.setRequestHeader("X-TxId", com.ticommunity.keyGen()); 
    xhr.withCredentials = true; 
    xhr.send(data); 
    xhr.onreadystatechange = function(){ 
     if(xhr.readyState == 4){ 
      if(xhr.status == 200){ 
       response = xhr.responseText; 
       com.ticommunity.comm.request_callback(response, callbacks, form); 
      }else{`//****this is where the 0 Status keeps coming up***` 
       response = xhr.status; 
       com.ticommunity.comm.request_callback(response, callbacks, form); 
      } 
     } 
    } 
} 

是否有其他人遇到過類似問題並提出解決方法?我只是在做我愚蠢的事情嗎?任何幫助是極大的讚賞。

編輯:我意識到0是應該發生的每規範,但我真的需要能夠陷阱這些情況下,並做一些其他處理。

回答

0

我還沒有看到這個問題,但我不知道你是否有更好的運氣使用不同的xhr事件,如xhr.onload。你可以信任onload在成功的響應上觸發,所以不需要檢查xhr.status。這裏有一個完整的事件列表,如果你需要陷害別的東西:

http://www.w3.org/TR/XMLHttpRequest2/#events