【发布时间】:2015-07-18 18:14:35
【问题描述】:
我正在尝试从 Ajax 输出返回数组中的两个变量,以便在其他地方的另一个单独函数中使用:
但不知道如何将其传递到新功能?
我在这里的尝试:
var ip,country;
function getVisitorData(callback) {
$.ajax({
type: "GET",
url: "http://freegeoip.net/json/",
dataType: "json",
async: true,
success: function (response) {
ip = response.ip;
country = response.country_code;
callback(response);
},
error: function (response) {
alert("IP thing didn't work.");
}
});
}
function callback(response) {
return [ip, country];
//alert(ip + country); /* <- it works here */
}
getVisitorData(callback);
jQuery(document).ready(function () {
var data = getVisitorData(callback);
var ip = data[0];
var country = data[1];
alert(ip + country);
});
更新:
我想使用输出 作为 GLOBAL VARIABLES !
所以,就这样获取/使用它:
jQuery(document).ready(function () {
alert(ip)
});
抱歉,如果我对此不够清楚!
非常感谢!
【问题讨论】:
-
关于您的更新,您在这里大错特错,抱歉!异步 JavaScript 根本不能那样工作。听听那些告诉你你需要调用一个带有返回数据的函数而不是仅仅将它存储在一个全局变量中的人,并听取他们的建议。只有这样,你才能成功解决问题。您可以使用回调,也可以使用承诺——这只是做同一件事的两种方式。你不能做的只是将数据存储在一个全局变量中,并期望它在你发出 ajax 请求后可用。
-
我更新了您的一个小提琴以将其变成一个工作示例:jsfiddle.net/mea2nr7t/1
-
你不能做的是“返回”数据或将其留在全局变量等中。这就是问题所在:需要数据的代码如何知道何时实际从服务器接收到数据?知道数据准备就绪的唯一方法是调用回调。
标签: javascript jquery ajax callback jquery-callback