我在将数据传回外部变量时遇到问题。我知道ajax请求有效,但它没有以我需要的方式传递它。
这是我班级的精确方法
function(amount,symbol=''){
var current_rate = '';
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";
var get_rate = $.ajax({
url: url,
method: "GET"
}).complete(function(data){
current_rate = data.responseJSON.query.results.div.span.content;
}).fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
return current_rate;
}

为了简单起见,我编写了代码。但是heres完整的脚本。我只需要知道如何将请求中的数据传递回' Current_rate'变量
答案 0 :(得分:0)
您的函数返回current_rate = ''
,因为当函数结束时,这是current_rate
的值。在异步调用完成之前 结束!
这部分:
$.ajax({
url: url,
method: "GET"
}).complete(function(data){
current_rate = data.responseJSON.query.results.div.span.content;
})
当AJAX调用返回时将设置current_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 Deferred object的文档。另请参阅这篇文章,其中包含对问题和各种解决方案的优秀(长!)解释:How do I return the response from an asynchronous call?