2012-05-28 23 views
0

我試圖構建一個.js文件,它將數據發送到外部API,等待響應並解釋結果。外部API是基於XML的,並接受一個HTTPS Post,其XML爲body(content-type; text/xml)。我可以通過cURL正確調用API。jQuery上的API調用

這是我到目前爲止有:

<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body onload="CallService()"> 

<script type="text/javascript"> 
var webServiceURL = 'https://www.url.com'; 
var xmlString = '<xml><parameter1>value1</parameter1> 
<parameter2>value2</parameter2></xml>'; 

function CallService() { 
    $.ajax({ 
     url: webServiceURL, 
     type: "POST", 
     dataType: "xml", 
     data: xmlString, 
     processData: false, 
     contentType: "text/xml; charset=\"utf-8\"", 
     success: OnSuccess, 
     error: OnError 
}); 
    return false; 
} 

function OnSuccess(data, status) { 
    alert(data.d); 
} 

function OnError(request, status, error) { 
    alert('error'); 
} 

$(document).ready(function() { 
    jQuery.support.cors = true; 
}); 
</script> 
</body> 
</html> 

當我打開HTML我得到一個警告說「錯誤」,並沒有出現在另一端(外部API的)。有沒有辦法使用JavaScript/Ajax/jQuery來做到這一點,還是我需要一個接收JS調用的「支持」代碼?

+2

存在各種問題,從瀏覽器調用不同域的URL。基本的答案是,這是不可能的,儘管一些最近的發展使服務器允許這樣的請求成爲可能。你必須控制服務器軟件才能做到這一點。 – Pointy

+0

如果我確實控制了服務器,該怎麼辦?爲了達到這個目的,我需要改變什麼樣的設置? – user1375193

+0

尋找關於「CORS」 - 跨源資源共享的教程。這是一個HTML5的東西,它涉及一些特殊的標題和類似的東西。當然,舊的瀏覽器不支持它,但它畢竟是2012年:-) – Pointy

回答

0

當你想跨域查詢,你已經基本上3種解決方案:

1)使用JSONP,這將不感興趣你,如果你正在使用XML和JSON不

2 )通過在服務於主html頁面的服務器上設置一種代理服務器(或任何類型的獲取服務),不是真的跨域,3)在服務器上更改標題以向瀏覽器指定您接受跨域請求,域查詢。這是新的,但被所有主流瀏覽器接受。這就是所謂的CORS。在所有服務器端語言中更改標題(「Access-control -...」)非常容易,因此現在應該是首選方式(如果您遇到問題(安全性,權限,帶寬,廣告等)訪問您所服務的數據,您可以限制允許的來源)。