我希望这很容易。但不,警报永远不会被召唤。请帮忙。
$.getJSON("http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json&view=basic&callback=?", function(result){
//response data are now in the result variable
alert(result);
});
我在Yahoo JSONP Ajax Request Wrapped in callback function上尝试了接受的答案 但这对我来说也不起作用:(
我做了一个jsfiddle,但没有运气。
var quote;
$(".price").text("please");
$(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);
};
});
答案 0 :(得分:0)
我发现ajax调用不起作用的原因是因为Query会自动为你的URL末尾添加一个时间戳,确保永远不会缓存ajax请求。 Yahoo Finance Web服务不支持timestamp参数。
需要添加以下行:
$.ajaxSetup({'cache':true});
以下是整个代码:
var quote;
$.ajaxSetup({'cache': true});
$(document).ready(function () {
$.ajax({
url: "http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json&view=basic",
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "quote"
});
quote = function (data) {
var arrayLength = data.list.resources.length;
var restext = '';
for (var i = 0; i < arrayLength; i++) {
restext += "<br>" + data.list.resources[i].resource.fields.name;
}
$('#res').html(restext);
};
});
http://jsfiddle.net/teshg0kn/3/
我也使用纯JS工作。
function getQuote(obj) {
var arrayLength = obj.list.resources.length;
for (var i = 0; i < arrayLength; i++) {
document.getElementById("ip").innerHTML += "<br>" + obj.list.resources[i].resource.fields.name;
}
}
var url = "http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json&view=basic&callback=getQuote"
var script = document.createElement('script');
script.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(script);
答案 1 :(得分:0)
你在小提琴中做错了两件事:当小提琴使用http
而没有在标题中加载脚本时,通过https
访问框架(这使得jsonp无法访问全局{ {1}}对象)。
养成使用query
代替//
或http
访问脚本的习惯,然后浏览器会为您选择正确的协议:
https