2011-12-20 33 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