在回调期间设置变量
Setting Variable During Callback
以下 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。
任何解释将不胜感激。提前谢谢。
.done() 需要一个回调。尝试换出
console.log(userip)
跟
function() { console.log(userip); }
您正在做的是使console.log(userip)
立即执行,而不是在请求完成后执行。这就是为什么userip
正确存储在成功处理程序中的原因。done
视为请求完成后要执行的操作。它需要执行一个动作(函数)。您正在传递一个语句 ( console.log(userip)
),该语句实际上返回 undefined
。所以done
什么都不做。
试试这个
}).done(function() {
console.log(userip);
});
试试这个
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
}
});
相关文章:
- 如何在定义js文件后为外部javascript文件设置变量
- 在 Jquery/Javascript 中使用多个 OR (||) 运算符时如何设置变量
- 在值内设置变量
- 在javascript函数中设置变量
- 设置变量时破坏游戏代码
- 未设置变量的赋值| jQuery的作用是什么
- 在可编辑行内设置变量
- 在不中断形式帖子的情况下在角度中设置变量
- MongoDB MonkAPI根据数据库请求之外可用的查找结果设置变量
- text方法中的javascript设置变量
- 如何为JavaScript函数设置变量以嵌入视频
- 使用jQuery和PHP加载区域设置变量
- 包括外部JS文件和设置变量
- 在jQuery File upload插件中设置变量上传路径
- 设置变量函数不起作用
- Session.get未在Meteor.js中设置变量
- 为cytoscape.js mapData设置变量限制
- 如何在脚本标记中设置变量
- 使用控制器在conditional.js.erb文件中设置变量
- 如何从控制台动态设置变量