以下jQuery代码尝试在回调ajax GET请求期间将客户端的IP地址存储在全局变量中。
var userip = null;
$.ajax({
url: "http://ipinfo.io",
type: 'get',
dataType: 'jsonp',
async: false,
success: function(data) {
userip = data.ip;
console.log(userip); // prints unique ip address
}
}).done(console.log(userip)); // prints null
知道GET请求通常是异步执行的(但另有要求),我在JSON规范中标记了async: false
。为了增加度量,我调用done()
以确保请求已完成,然后继续。
尽管如此,打印userip
在GET请求后返回null,但在ajax成功回调期间打印唯一的客户端IP。
任何解释都将不胜感激。提前谢谢。
答案 0 :(得分:1)
.done()需要回调。尝试交换
console.log(userip)
与
function() { console.log(userip); }
答案 1 :(得分:0)
您正在做的是立即执行console.log(userip)
,而不是在请求完成后执行。这就是userip
在成功处理程序中正确存储的原因。将done
视为请求完成后要执行的操作。它需要执行一个动作(函数)。您正在传递实际返回console.log(userip)
的语句(undefined
)。所以done
没有做任何事情。
试试这个
}).done(function() {
console.log(userip);
});
答案 2 :(得分:0)
试试这个
var userip = null;
$.ajax({
url: "http://ipinfo.io",
type: 'get',
dataType: 'jsonp',
async: false,
success: function (data) {
userip = data.ip;
console.log(userip); // prints unique ip address
},
complete: function () {
console.log(userip); // prints unique ip address
}
});