.getJSON()和.ajax()都不适用于REST API调用

Jay*_*ram 2 javascript rest jquery

有人可以解释我如何使用jQuery/Javascript进行REST调用吗?我尝试使用.getJSON().ajax(),但都没有帮助我.

这是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'); }
});
Run Code Online (Sandbox Code Playgroud)

swa*_*ins 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]);
  }

);
Run Code Online (Sandbox Code Playgroud)

然后你会收到一个Uncaught SyntaxError: Unexpected token :错误.这是因为您期待json数据,但服务器上的标头正在发送text/html- 而不是application/json.当你运行这个小提琴时,看看控制台,你会看到错误.

因此,您无法从跨域获取数据,因为您必须使用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;
?>
Run Code Online (Sandbox Code Playgroud)

然后,您只需将$ .getJSON指向您服务器上的此脚本:

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

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

);
Run Code Online (Sandbox Code Playgroud)