gpt4 book ai didi

javascript - ajax 请求后将数据传递给变量

转载 作者:行者123 更新时间:2023-11-28 06:07:12 26 4
gpt4 key购买 nike

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

这是我类(class)中的一个确切方法

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”变量

最佳答案

您的函数返回 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() 返回的 promise ,以便您的调用函数可以等待它:

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?

关于javascript - ajax 请求后将数据传递给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com