2010-10-27 95 views
0

我越來越瘋狂與這一個...爲什麼除了IE之外,所有瀏覽器上的XMLHttpRequest.status == 0?

我做了一個RESTful.NET Web服務與C#和運行作爲一個獨立的服務。當我創建一個XMLHttpRequest來檢索JSON數據時,除IE之外,所有瀏覽器都會失敗,因爲XMLHttpRequest實例的狀態標誌始終爲0 - 應該是200,這就是IE的情況。

我已經讀過,0是一個靜態HTML頁面誰不在網絡服務器上的正確值。所以,我安裝了Apache,並把頁面放在那裏,但結果是一樣的(我可能錯誤地解釋了這個建議......)

我運行了Fiddler,並且任何瀏覽器都能正確地檢索請求!

這裏的JavaScript代碼,我使用:

<script type="text/javascript"> 

var serviceURI = 'http://localhost:8889/WebService/client/25'; 
var xmlHttp = new XMLHttpRequest(); 

function clientHandler() 
{ 
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) 
    { 
     var json = xmlHttp.responseText; 
     var client_id = document.getElementById('clientid'); 
     var client_name = document.getElementById('clientname'); 
     var client_address = document.getElementById('clientaddress'); 
     var client_phone = document.getElementById('clientphone'); 

     var client = eval('(' + xmlHttp.responseText + ')'); 
     client_id.value = client.id; 
     client_name.value = client.name; 
     client_address.value = client.address; 
     client_phone.value = client.phoneNumber; 
    } 
    else 
     alert("Error:\nxmlHttp.responseText = " + xmlHttp.responseText + "\nstatus = " + xmlHttp.status); 
} 

function sendRequest() 
{ 
    if (xmlHttp) 
    { 
     xmlHttp.onreadystatechange = clientHandler; 
     xmlHttp.open('GET', serviceURI, true); 
     xmlHttp.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
     xmlHttp.send(null); 
    } 
    else 
     alert('xmlHttp not defined!'); 
} 
</script> 

我會很高興,如果有人可以解釋我發生了什麼;我還沒有找到任何這樣的sactisfatory探討...

此外,使用jQuery這個工作框架更好嗎?

謝謝大家!

PS:我已經諮詢喬恩·弗蘭德RESTful.NET,但它並沒有解決這個幫助很大... :(

編輯:我的答案搬到了這個問題評論婁!

+0

Goog成交!我很高興你找到答案。 – David 2010-10-31 13:52:51

回答

3

目前的問題與相同的來源政策有關。我發現在計算器上2篇文章,幫助我找出問題所在:

對於問題的解決方案是here!添加以下行到服務器的方法:

WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*"); 

通過加入這一行每個方法,響應的頭自帶如下:

HTTP/1.1 200 OK 
Content-Length: 81 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-HTTPAPI/1.0 
Access-Control-Allow-Origin: * 
Date: Sun, 31 Oct 2010 02:34:34 GMT 

<json data> 

這樣在Firefox,Safari瀏覽器的服務工作,Chrome和IE。但正如在答案中所說的那樣,必須有更好的方法來解決這個問題。我會盡力找到一些關於:)

3

Internet Explorer使用不同的對象比其他瀏覽器,使Ajax請求。
微軟使用的Microsoft.XMLHTTP對象,而其他瀏覽器使用XMLHttpRequest對象。

這裏有一篇文章,解釋它一個d解釋如何做一個解決方法。

http://ajaxpatterns.org/Cross-Browser_Component

最好的辦法是使用許多圖書館的一個在那裏製作Ajax請求。將爲您處理抽象。我看到您的帖子被標記爲C#。如果是這種情況,並且您正在使用Asp.NET開發頁面,則可以使用標準的Asp.Net Ajax工具(ScriptManager和UpdatePanel),儘管很多人更喜歡使用JQuery。

+0

大衛你好!對於答案的延誤,抱歉;最近我一直很忙。我找到了解決方案!這是HTTP請求頭部的Access-Control-Allow-Origin問題 - 具有相同原始策略的問題。請閱讀我對原文的編輯。謝謝您的幫助! – jmpcm 2010-10-31 02:41:32

+0

PS:我已經嘗試用ASP.NET Ajax開發一個頁面,但是我有點沮喪,因爲您構建服務器代碼的方式與靜態HTML頁面或其他類型的客戶端不同。但我必須再試一次;這是我第一次嘗試ASP.NET xD – jmpcm 2010-10-31 03:10:28

相關問題