Yahoo JSONP Ajax Request包含在回调函数中

时间:2011-07-04 03:49:31

标签: jquery ajax jsonp yahoo-api

我知道我可以使用jquery,.ajax和jsonp进行跨域调用ajax。我打电话给雅虎股票报价api。一切正常,结果又回来了(我可以看到使用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 个答案:

答案 0 :(得分:6)

我想添加这个答案,因为看起来上面的user209245's answer(来自2011年)不再有用。我是这样做的:

  1. 使用YQL Console为您想要获得的股票构建查询,例如Apple:

      

    从yahoo.finance.quotes中选择*,其中symbol =“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
    
  5. 当然,一旦你收到数据,你可以显示你想要的任何东西;我只是以价格为例,因为这就是我所需要的。

答案 1 :(得分:4)

以下是我如何使用它:

我使用.ajax而不是.jsonp,因为你需要提供url参数。 您还需要在代码中定义Yahoo回调函数的名称。 这是一个解释如何使用Yahoo回调函数及其Web服务的链接。

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>   

答案 2 :(得分:0)

以下是工作示例:请参阅callback =?在我的查询结束时使其工作。 此示例可以作为独立的html复制过去。

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

答案 3 :(得分:0)

这是一个适用于我的修订版本:

$(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);
    };
});

答案 4 :(得分:0)

这是一个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>