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

我知道我可以使用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); } }); 

我想添加这个答案,因为它看起来像user209245上面的答案 (从2011年开始)不再有效。 我是这样做的:

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

    select * from yahoo.finance.quotes where 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

     $543.21 

当然,一旦你收到数据,你可以显示你想要的任何东西; 我只是以价格为例,因为这就是我所需要的。

以下是我如何使用它:

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

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

这是代码:

  

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

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

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

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

这是一个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: 
loading ask
Realtime (null if market is closed):
loading realtime