Javascript 在ajax请求后将数据传递给变量

Javascript 在ajax请求后将数据传递给变量,javascript,jquery,Javascript,Jquery,我在将数据传回外部变量时遇到问题。我知道ajax请求是有效的,但它没有以我需要的方式传递它 这是我班上的一个确切方法 函数(金额,符号=“”){ var当前利率=“”; 变量url=”https://query.yahooapis.com/v1/public/yql?q=select%20*%20从%20html%20其中%20url%3D'https%3A%2F%2Fwww.google.com%2Ffinance%2Fconverter%3Fa%3D“+金额+%26从%3DNGN%26到%

我在将数据传回外部变量时遇到问题。我知道ajax请求是有效的,但它没有以我需要的方式传递它

这是我班上的一个确切方法

函数(金额,符号=“”){
var当前利率=“”;
变量url=”https://query.yahooapis.com/v1/public/yql?q=select%20*%20从%20html%20其中%20url%3D'https%3A%2F%2Fwww.google.com%2Ffinance%2Fconverter%3Fa%3D“+金额+%26从%3DNGN%26到%3D”+符号+“'%20和%20xpath%3D'%2F%2Fdiv%5B%40id%5D'&格式=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys”;
var get_rate=$.ajax({
url:url,
方法:“获取”
}).完成(功能(数据){
当前_比率=data.responseJSON.query.results.div.span.content;
}).fail(函数(jqXHR,textStatus){
警报(“请求失败:+textStatus”);
});
返回电流单位率;

}
您的函数返回
current\u rate='
,因为这是函数结束时
current\u rate
的值。它在异步调用完成之前结束

本部分:

$.ajax({
  url: url,
  method: "GET"
}).complete(function(data){
    current_rate = data.responseJSON.query.results.div.span.content;
})
将在AJAX调用返回时设置
current\u rate
,这将在函数返回后很久。您必须将
$.ajax()
视为调度请求(以及请求完成时运行的代码)。它不会阻止或等待这种情况发生-您的功能只是继续

这里最好的解决方案是返回
$.ajax()
返回的承诺,这样您的调用函数就可以等待它了:

function(amount,symbol=''){
            var url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D'https%3A%2F%2Fwww.google.com%2Ffinance%2Fconverter%3Fa%3D"+ amount +"%26from%3DNGN%26to%3D"+ symbol +"'%20and%20xpath%3D'%2F%2Fdiv%5B%40id%5D'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";

            return $.ajax({
              url: url,
              method: "GET"
            });
        }
要使用此函数,请按如下方式调用函数:

get_current_rate(1000,'CAD').complete(function(data) {
     // do something with the returned data
});

请参阅jQuery的文档。另请参阅这篇文章,其中包含了对问题和各种解决方案的出色(长!)解释:

您的函数返回
当前\u rate=''
,因为这是函数结束时
当前\u rate
的值。它在异步调用完成之前结束

本部分:

$.ajax({
  url: url,
  method: "GET"
}).complete(function(data){
    current_rate = data.responseJSON.query.results.div.span.content;
})
将在AJAX调用返回时设置
current\u rate
,这将在函数返回后很久。您必须将
$.ajax()
视为调度请求(以及请求完成时运行的代码)。它不会阻止或等待这种情况发生-您的功能只是继续

这里最好的解决方案是返回
$.ajax()
返回的承诺,这样您的调用函数就可以等待它了:

function(amount,symbol=''){
            var url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D'https%3A%2F%2Fwww.google.com%2Ffinance%2Fconverter%3Fa%3D"+ amount +"%26from%3DNGN%26to%3D"+ symbol +"'%20and%20xpath%3D'%2F%2Fdiv%5B%40id%5D'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";

            return $.ajax({
              url: url,
              method: "GET"
            });
        }
要使用此函数,请按如下方式调用函数:

get_current_rate(1000,'CAD').complete(function(data) {
     // do something with the returned data
});

请参阅jQuery的文档。另请参阅这篇文章,其中包含了对问题和各种解决方案的出色(长!)解释:

Ajax是异步调用。。。因此,当前速率的返回速度将快于“完成/失败”的调用速度。。。另外,我想目前的利率超出了范围。。。为了实现一些技巧,您可以同步调用ajax。。喜欢这里,但我不推荐。。最好重写代码…Ajax是异步调用。。。因此,当前速率的返回速度将快于“完成/失败”的调用速度。。。另外,我想目前的利率超出了范围。。。为了实现一些技巧,您可以同步调用ajax。。喜欢这里,但我不推荐。。最好重写你的代码…避免错误@谢谢,我今天学到了一些东西!避开这个@谢谢,我今天学到了一些东西!