我正在尝试从 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)
});
很抱歉,如果我对此不够清楚的话!
非常感谢提前!
答案 0 :(得分:4)
答案 1 :(得分:2)
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(data) {
var ip = data[0];
var country = data[1];
return [ip, country];
}
jQuery(document).ready(function () {
getVisitorData(callback);
});
callback
中的数据操作功能不在任何其他功能中。有关详细信息,请访问Callback function
答案 2 :(得分:0)
创建一个全局对象。
Var objMyData = {};
将ip和国家/地区代码存储在该对象中。
objMyData.IP = response.IP; objMyData.Country = response.country_code;
现在将objMyData对象作为参数传递给任何函数。
答案 3 :(得分:0)
我不知道为什么你需要在你的回调中返回一个数组。由于ajax是异步的,它不会等到响应到来,它将执行其余的语句。所以返回值会给你未定义。只有在响应到来之后才能使用/分配响应。
function getVisitorData(callback) {
return $.ajax({
type: "GET",
url: "http://freegeoip.net/json/",
dataType: "json",
async: true
});
}
jQuery(document).ready(function () {
$.when(getVisitorData())
.done(function(respone) {
var ip = response.ip;
var country = response.country_code;
//here you can trigger a custom event with the values, wherever you need, just bind the event and use the data.
$(document).trigger("responseDataPublished", [ip, country]);
})
.fail(function(response){
alert("IP thing didn't work.");
});
});
答案 4 :(得分:0)
这是我们很多人不知道的常见问题,在您的服务调用成功或失败之前,您的服务调用旁边的行将执行,因此您需要设置一些超时
//创建一个全局对象。
var objMyData = {} global object
;
function getVisitorData(){function call
$阿贾克斯({`阿贾克斯
类型:“GET”,
网址:“http://freegeoip.net/json/”,
dataType:“json”,
异步:是的,
成功:功能(响应){
//在该对象中存储ip和国家/地区代码。
objMyData.ip = response.ip;
objMyData.Country = response.country_code;
},
错误:函数(响应){
警报(“知识产权不起作用。”);
}
});
}
jQuery(document).ready(function(){
//现在将objMyData对象作为参数传递给任何函数。
getVisitorData(); method call
setTimeout(function(){console.log(objMyData);},500);
});