有人可以解释一下如何使用jQuery / Javascript进行REST调用吗?我尝试使用.getJSON()
和.ajax()
,但都没有帮助我。
这是REST URL:
代码:
$.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'); }
});
答案 0 :(得分: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 feed的内容并将其回显。这是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指向服务器上的此脚本:
$.getJSON('/myproxy.php?zip='+zip,
function(data)
{
var mydata = jQuery.parseJSON(data);
alert(mydata.forecast[0]);
}
);