2011-11-18 59 views
2

我試圖通過ajax請求讀取http-response。作爲回聲服務器,我在主機上使用了一個簡單的套接字。它用XML返回http響應。就像這樣:通過Ajax解析返回的XML時出錯

HTTP/1.1 200 OK
Date: Fri, 18 Nov 2011 03:16:22 GMT
Content-Length: 94
Connection: close
Content-Type: text/xml

明白了。等待下一次..

作爲一個客戶,我使用下面的Ajax請求:

XML Parsing Error: no element found Location: moz-nullprincipal:{62148931-591e-41d7-8625-c86149386fc4} Line Number 1, Column 1:

我可以:

<html> 
<head> 
<script type="text/javascript" src="jquery-1.5.1.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $.ajax({   
    url: "http://localhost:8090/", 
    dataType: "text", 
    complete: function(jqXHR, textStatus){ 
       alert(textStatus); 
       alert(jqXHR.responseText); 
     }   
    }); 
}); 
</script> 
</head> 
<body> 
</body> 
</html> 

這個腳本執行我收到FF以下錯誤後如果我在FF,Chrome和IE中使用地址欄請求它,但沒有發現任何錯誤,則讀取結果XML,但此Ajax調用返回錯誤。看來我錯過了使用Ajax的東西。你能幫助我嗎? 謝謝。

+0

您是否要求客戶端腳本來自同一個域的XML?另外,嘗試一個「xml」的數據類型,而不是「文本」。 –

+0

是的,所有活動都在我的本地主機上運行。從「text」更改爲「xml」'dataType'值沒有幫助( – user1053031

+0

「本地主機」與同一個域名不同;請參閱下面的答案 –

回答

2

如果我正確地閱讀你的問題,你正在從本地文件中加載一些帶有打開文件的HTML,並將它指向在本地主機上運行的套接字服務器。 FireFox會認爲這些是不同的領域。 HTML腳本需要來自與請求的XML相同的本地主機服務器。

換句話說,出於安全原因,瀏覽器將只允許AJAX請求到「相同來源」。這是一個術語(對大多數瀏覽器而言)意味着「相同的協議,相同的主機,相同的端口」。

http://localhost:8090/是不一樣的起源http://localhosthttps://localhost(注意HTTPS對HTTP),也不是作爲一個HTML文件中加載了你的計算機(如文件相同的起源:///我/目錄/測試。 HTML)。

你可以嘗試添加下面的響應頭爲你的XML響應:

HTTP/1.1 200 OK 
Date: Fri, 18 Nov 2011 03:16:22 GMT 
Content-Length: 94 
Connection: close 
Content-Type: text/xml 
Access-Control-Allow-Origin: * 

如果你的瀏覽器支持跨源資源共享(CORS),那麼上面的「訪問控制允許來源」頭應該允許要從另一個域中訪問的XML。

+0

嗯,也許你是對的。在這種情況下? – user1053031

+0

你想完成什麼?如果你只是在玩AJAX,那麼使用一個真正的HTTP服務器(如Tomcat或Apache),這樣你就可以在同一個地方提供這兩個項目,否則你需要做一些像JSONP或腳本代理這樣的東西,它們都不允許你發送原始的XML –

+0

好!你對額外頭文件的建議解決了我的問題:)其實我試圖模擬我的C++應用程序和一些基於Web的應用程序之間的通信過程,應用程序在瀏覽器上下文中運行。非常感謝您的幫助! :) – user1053031