$ .json调用jQuery不会将值返回到变量中

时间:2014-03-29 19:30:00

标签: jquery ajax json return-value jquery-callback

我的$ .json jQuery调用函数出了问题,这是我的代码:

// function to get currency live rates from yahoo api keys

function getRate(from, to) {        
  $.getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22'+from+to+'%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=', function(data) {

    var rate  = data.query.results.rate.Rate; 

    return rate; 

  });

}// end of function

var receive = getRate('USD','EUR');

4 个答案:

答案 0 :(得分:2)

$ .getJSON是一个异步函数,这意味着一旦数据就绪就会执行回调,尝试在异步调用之后立即读取数据通常会得到一个空结果。

这里你真正需要的是传递你想要填充的变量以及回调函数

答案 1 :(得分:0)

Ajax中的A代表异步,您将在回调中获得结果而不是返回值

function getRate(from, to) {        
    $.getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22'+from+to+'%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=',
      function(data) {
        var rate  = data.query.results.rate.Rate; 
        // here you process
    });
}// end of function

getRate('USD','EUR');

答案 2 :(得分:0)

另一种方法是简单地从函数返回jqXHR对象,然后在调用函数后使用它:

function getRate(from, to) {
    return $.getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22'+from+to+'%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=');
}

getRate('USD','EUR').done(function(data) {
    var receive = data.query.results.rate.Rate; 
    // Do your work here
});

答案 3 :(得分:0)

最后我找到了一个使用$ .ajax调用函数将值返回到变量的解决方案, 检查上面的代码,对我来说非常合适,顺便说一下,谢谢大家:)

var rate = []; //第1步,我们创建一个新数组,因为我们将在这里存储返回值

//第2步,我们在

下创建我们的功能

函数getRate(from,to){

//第3步,变量内的ajax调用

var ajaxCall = $ .ajax({

async:false,
dataType:"json",
type:'GET',
url:'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22'+from+to+'%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=',
success: function(data) {
result = data.query.results.rate.Rate;
rate.push(result); //we push the result into the array

} }); // ajax call end

if(rate.indexOf()< = 0){

ajaxCall.abort();
return calc;

}

} //功能在这里完成

//然后瞧瞧:)

var returnValue = getRate('USD','EUR');

//现在做你想做的事

//例如:

警报(的returnValue);