我知道我可以使用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);
}
});
答案 0 :(得分:6)
我想添加这个答案,因为看起来上面的user209245's answer(来自2011年)不再有用。我是这样做的:
使用YQL Console为您想要获得的股票构建查询,例如Apple:
从yahoo.finance.quotes中选择*,其中symbol =“AAPL”
quote
插入它为您生成的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
当然,一旦你收到数据,你可以显示你想要的任何东西;我只是以价格为例,因为这就是我所需要的。
答案 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>