使用JSONP从Yahoo Finance加载报价

时间:2015-07-24 14:51:40

标签: javascript jquery callback jsonp

我希望这很容易。但不,警报永远不会被召唤。请帮忙。

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

https://jsfiddle.net/ustj6eob/

2 个答案:

答案 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);

http://jsfiddle.net/teshg0kn/2/

答案 1 :(得分:0)

你在小提琴中做错了两件事:当小提琴使用http而没有在标题中加载脚本时,通过https访问框架(这使得jsonp无法访问全局{ {1}}对象)。

养成使用query代替//http访问脚本的习惯,然后浏览器会为您选择正确的协议:

https

https://jsfiddle.net/anm6ebsp/