2013-01-17 80 views
1

我想用JavaScript處理http請求的響應。你可以在這裏找到一個簡單的例子。http-Get request with empty response

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1"> 
    <title>JavaScript Test</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
    function serviceCall() { 
     $.ajax({ 
     type: "GET", 
     url: 'http://localhost:8181/geoserver/wfs?Service=WFS&Request=GetFeature&Version=1.0.0&typename=topp:tasmania_water_bodies&SRS=EPSG:4326', 
//  url: 'http://demo.opengeo.org/geoserver/ows?Service=WFS&Request=GetFeature&Version=1.0.0&typename=topp:tasmania_water_bodies&SRS=EPSG:4326', 
     complete: function(xml, status){ 
      alert(xml.responseText); 
     } 
     }); 
    } 
    </script> 
</head> 
<body> 
    <center><button onclick="serviceCall()">Start...</button></center> 
</body> 
</html> 

該請求直接在瀏覽器中運行。通過Ajax和JavaScript,響應是空的。 Firebug在第1行第1列報告了xml解析錯誤。我嘗試將請求發送到本地主機和遠程服務器,但響應始終爲空。我將不勝感激任何建議。

+0

您對響應內容有什麼期待? – GreenRover

+2

http://en.wikipedia.org/wiki/Same_origin_policy – ManseUK

+2

你爲什麼要處理完成而不是ajax的成功事件? – ryadavilli

回答

1

爲什麼不使用success而不是complete?由於complete始終被觸發,即使它失敗了,只有在成功時纔會觸發success。比你不需要xml, status

例(CORS以來不工作):

$.ajax({ 
    type: "GET", 
    url: 'http://localhost:8181/geoserver/wfs?Service=WFS&Request=GetFeature&Version=1.0.0&typename=topp:tasmania_water_bodies&SRS=EPSG:4326', 
    success: function(response){ 
     alert(response); 
    } 
    }); 

此外,如果你wan't訪問不同的域。如果您擁有其他域,則可以使用JSONP。否則,這是不可能的。

嘗試下面的部分添加到URL:&outputFormat=json&format_options=callback:processJSON

工作無jQuery的例子(LIVE這裏的例子:http://jsfiddle.net/QWgJa/

function loadJSON(url) 
{ 
    var headID = document.getElementsByTagName("head")[0]; 
    var newScript = document.createElement("script"); 
    newScript.type = 'text/javascript'; 
    newScript.src = url; 
    headID.appendChild(newScript); 
} 
function processJSON(jsonData) 
{ 
    alert(jsonData); 
} 

loadJSON("http://demo.opengeo.org/geoserver/ows?Service=WFS&Request=GetFeature&Version=1.0.0&typename=topp:tasmania_water_bodies&SRS=EPSG:4326&outputFormat=json&format_options=callback:processJSON"); 

信息的URL

+0

一般正確;然而,[跨源資源共享](http://www.html5rocks.com/en/tutorials/cors/)(CORS)是服務器允許瀏覽器完成跨域Ajax請求的一種方式。這是一個比JSONP更清潔的解決方案(儘管舊版瀏覽器支持JSONP)。 – apsillers

+0

仍然JSONP是CORS的唯一解決方案。 – Niels

+0

恐怕不理解你的評論。 [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)和[JSONP](https://en.wikipedia.org/wiki/JSONP)是兩種完全獨立的方法來避免同源政策。 CORS使用特殊的服務器頭,比如'Access-Control-Allow-Origin',它告訴瀏覽器如果請求來自一個特定的源,忽略同源策略。正如我所說的,CORS排除了一些較舊的瀏覽器,因爲它需要一個支持CORS的瀏覽器。因此,JSON擁有最廣泛的支持,但它不是唯一的解決方案。 – apsillers

相關問題