2011-12-20 35 views
2

有人可以解釋我如何使用jQuery/Javascript進行REST調用嗎?我嘗試使用.getJSON().ajax(),但都沒有幫助我。.getJSON()和.ajax()不適用於REST API調用

這是REST URL:

http://ws1.airnowgateway.org/GatewayWebServiceREST/Gateway.svc/forecastbyzipcode?zipcode=94954&date=2010-01-15&format=json&key=API_KEY

代碼:

$.getJSON('http://ws1.airnowgateway.org/GatewayWebServiceREST/Gateway.svc/forecastbyzipcode?zipcode='+zip+'&format=json&key=**<KEY HERE>**', 

    function(data) 
    { 

     alert(data.AQI); 
    } 

); 

$.ajax({ 
    url: 'http://ws1.airnowgateway.org/GatewayWebServiceREST/Gateway.svc/forecastbyzipcode', 
    type: 'GET', 
    data: 'zipcode='+zip+'&format=json&key=**<KEY HERE>**', 
    success: function() { alert('get completed'); } 
}); 
+3

開始爲谷歌搜索 –

+1

@RoyiNamir仍然考慮跨域......「」然而,這些跨域請求的常見名稱往往是誤導性的,雖然從一個域到另一個域的請求顯然是跨域的,但瀏覽器更挑剔 例如,從foo.domain.com到bar.domain.com的請求與abc.com的請求一樣多,這不像傳統的跨域場景那麼直觀,但是,需要同樣的考慮。「 - http://encosia.com/using-cors-to-access-asp-net-services-across-domains/ – xandercoded

+0

是的,默認情況下,瀏覽器不允許JavaScript執行不同的請求域/協議..當然,這有幾種解決方法 – redShadow

回答

7

有幾個問題。首先,您需要在查詢字符串的末尾添加&callback=?以允許跨域。

$.getJSON('http://ws1.airnowgateway.org/GatewayWebServiceREST/Gateway.svc/forecastbyzipcode?zipcode=94954&format=json&key=B868EA39-1D92-412A-96DE-DCF5ED30236D&callback=?', 

    function(data) 
    { 
    alert(data.forecast[0]); 
    } 

); 

您將收到Uncaught SyntaxError: Unexpected token :錯誤。這是因爲您期待的數據爲json,但服務器上的標頭正在發送text/html - 而不是application/json。當你run this fiddle看看控制檯,你會看到錯誤。

因此,您無法從跨域獲取數據,因爲您必須使用jsonp - 哪個要求頭才能正確發送。

如果這是您的api,那麼您只需要發送正確的標題,否則,您需要與開發人員在那裏並要求他們修復它。


或者

如果沒有這些上面的選項工作,你總是可以創建一個代理腳本,將得到JSON提要的內容,爲您和回聲出來。這裏有一個在PHP中:

<?php 
// myproxy.php 

header('Content-type: application/json'); 
$zip = $_GET['zip']; 
$results = file_get_contents('http://ws1.airnowgateway.org/GatewayWebServiceREST/Gateway.svc/forecastbyzipcode?zipcode=' . $zip . '&format=json&key=B868EA39-1D92-412A-96DE-DCF5ED30236D'); 

echo $results; 
?> 

然後,你只需將您的$ .getJSON到你的服務器上運行此腳本:「跨域Ajax」的

$.getJSON('/myproxy.php?zip='+zip, 

    function(data) 
    { 
    var mydata = jQuery.parseJSON(data); 
    alert(mydata.forecast[0]); 
    } 

); 
+0

真棒...非常感謝您的幫助! – Jayaram

+0

進入一個新問題。其餘的網址有一個郵政編碼,如何在詢問用戶後動態發送郵政編碼? – Jayaram

+0

您可以將它作爲查詢字符串發送到myproxy.php腳本:'/myproxy.php?zip = 12345' - 然後在您的php腳本中使用'$ _GET ['zip']'在其中動態添加它。我會更新我的答案。 – swatkins