И .getJSON (), и .ajax () не работают для вызова REST API - PullRequest
2 голосов
/ 21 декабря 2011

Может кто-нибудь объяснить мне, как сделать вызов REST, используя jQuery / Javascript?Я пытался использовать .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'); }
});

1 Ответ

7 голосов
/ 21 декабря 2011

есть пара проблем.Сначала вам нужно добавить &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.Посмотрите на консоль, когда вы запустите эту скрипку , вы увидите ошибки.

Следовательно, вы не можете получить данные из междоменной области, потому что вы должны использовать 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 на этот скрипт на вашем сервере:

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

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

);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...