Запрос Yahoo JSONP Ajax, заключенный в функцию обратного вызова - PullRequest
3 голосов
/ 04 июля 2011

Я понимаю, что могу сделать междоменный вызов ajax с помощью jquery, .ajax и jsonp.Я называю API котировки акций Yahoo.Все работает, и результат возвращается (я вижу, используя Fiddler.) Проблема в том, что я получаю ошибку js YAHOO не определена.Я думаю, что у него есть проблемы, потому что JSON отформатирован в функции обратного вызова, поэтому его синтаксис JSON неправильный.Что я могу сделать, чтобы это исправить?Спасибо!Вот код:

     $.ajax({
            type: 'GET',
            dataType: 'jsonp',
            jsonp: 'callback',
            jsonpCallback: 'YAHOO.Finance.SymbolSuggest.ssCallback',
            data:{
                query: request.term
            },
            url: 'http://autoc.finance.yahoo.com/autoc',
            success: function (data) {
                alert("yes");
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            }
        });

Ответы [ 5 ]

6 голосов
/ 14 февраля 2014

Я хотел бы добавить этот ответ, так как он выглядит как ответ пользователя user209245 выше (с 2011 года) больше не работает.Вот как я это сделал:

  1. Используйте консоль YQL для создания запроса на акции, которые вы хотите получить, например, Apple:

    выберите * из yahoo.finance.quotes, где символ = «AAPL»

  2. Убедитесь, что выбран JSON, и укажите обратный вызов JSONP, например, quote
  3. НажмитеТест
  4. Подключите запрос REST, который он генерирует для вас, следующим образом:

    var quote;
    
    $(document).ready(function() {
        $.ajax({
            url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%3D%22AAPL%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=quote",
            dataType: "jsonp",
            jsonp: "callback",
            jsonpCallback: "quote"
        });
    
        quote = function(data) {
            $(".price").text("$" + data.query.results.quote.AskRealtime);
        };
    });
    

    Тогда на вашей странице .price <div> будет отображаться:

    $543.21
    

Конечно, как только вы вернете данные, вы можете отобразить что угодно;Я просто использую цену в качестве примера, потому что для этого мне и нужно

4 голосов
/ 16 августа 2011

Вот как я заставил это работать:

Я использовал .ajax вместо .jsonp, потому что вам нужно указать параметры URL. Вы также должны определить в своем коде имя функции обратного вызова Yahoo. Вот ссылка, объясняющая, как использовать функцию обратного вызова Yahoo с ее веб-сервисами.

http://developer.yahoo.com/javascript/json.html#callbackparam

Вот код:

<script type="text/javascript">
    // this variable must be defined this way
    var YAHOO = {
        Finance: {
            SymbolSuggest: {}
        }
    };

    $(document).ready(function(){           
        var query;

        query = 'Yahoo';        
        if (query.length > 0)
        {

          $.ajax({
              type: "GET",
              url: "http://d.yimg.com/autoc.finance.yahoo.com/autoc",
              data: {query: query},
              dataType: "jsonp",
              jsonp : "callback",
              jsonpCallback: "YAHOO.Finance.SymbolSuggest.ssCallback",
          });
          // call back function
          YAHOO.Finance.SymbolSuggest.ssCallback = function (data) {
            alert(JSON.stringify(data));
          }
        }

    }); 


    </script>   
0 голосов
/ 03 июля 2015

Вот для этого js-скрипка: https://jsfiddle.net/vham369w/1/

, используя $.getJson вместо $.ajax

JS

$(document).ready(function() {
    var symbol = 'AAPL'
    var url =  "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%3D%22"+symbol+"%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
    $.getJSON(url + "&callback=?", null, function(data) {
        console.log(data);
        $("#realtime").text("$" + data.query.results.quote.AskRealtime);
        $("#ask").text("$" + data.query.results.quote.Ask);
    });
});

HTML

Ask:
<div id="ask">
    loading ask
</div>
Realtime (null if market is closed):
<div id="realtime">
    loading realtime
</div>
0 голосов
/ 25 января 2015

Вот исправленная версия, которая работала для меня:

$(document).ready(function() {
    $.ajax({
        url: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AAPL%22)%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=quote",
        dataType: "jsonp"
    });

    window.quote = function(data) {
        console.log(data);
    };
});
0 голосов
/ 04 июля 2011

Вот рабочий пример: Смотрите callback =? в конце моего запроса, чтобы заставить его работать. Этот пример можно скопировать как отдельный html.

https://github.com/cirs/PortfolioApp/blob/master/PortfolioApp-Step1-GetData.html

...