Javascript 函数返回全局变量
我觉得这真的很容易,但我想不出来 我想在getCurrentUser函数中设置currentUserId,我希望能够在其他函数中调用它 下面是我现在拥有的,它返回未定义。我错过了什么Javascript 函数返回全局变量,javascript,jquery,ajax,global-variables,Javascript,Jquery,Ajax,Global Variables,我觉得这真的很容易,但我想不出来 我想在getCurrentUser函数中设置currentUserId,我希望能够在其他函数中调用它 下面是我现在拥有的,它返回未定义。我错过了什么 var currentUserId; function getCurrentUser() { $.ajax({ type: "GET", url: '/set_user', success: function(result) {
var currentUserId;
function getCurrentUser() {
$.ajax({
type: "GET",
url: '/set_user',
success: function(result) {
currentUserId = result.id;
return currentUserId;
},
error: function(err) {
console.log(err);
}
})
};
getCurrentUser();
console.log("current user id is " + currentUserId);
这是因为在
getCurrentUser
方法中,您正在执行一个异步AJAX调用,因此当您使用console.log
打印该值时,该值尚未准备就绪
当GET/set_user
请求成功结束时,将正确设置该值,只有在这种情况下,功能:
success: function(result) {
currentUserId = result.id;
return currentUserId;
}
将执行并设置currentUserId
根据文档,$.ajax
调用返回的值是一个承诺。因此,首先,将承诺返回给调用方(1),然后等待承诺被解析以打印值(2)
这是因为在
getCurrentUser
方法中,您正在执行一个异步AJAX调用,因此当您使用console.log
打印该值时,该值尚未准备就绪
当GET/set_user
请求成功结束时,将正确设置该值,只有在这种情况下,功能:
success: function(result) {
currentUserId = result.id;
return currentUserId;
}
将执行并设置currentUserId
根据文档,$.ajax
调用返回的值是一个承诺。因此,首先,将承诺返回给调用方(1),然后等待承诺被解析以打印值(2)
就像Andrea explain一样,在进行ajax调用时,值还没有准备好 避免这种情况的一种方法是使用回调: 函数getCurrentUser(回调){ $.ajax({ 键入:“获取”, url:“/set_user”, 成功:功能(结果){ var currentUserId=result.id; 如果(回调) 回调(currentUserId); }, 错误:函数(err){ 控制台日志(err); } }) }; 函数displayResult(用户ID){ log(“当前用户id为”+用户id); }
getCurrentUser(显示结果)代码>像Andrea explain一样,在进行ajax调用时,值还没有准备好 避免这种情况的一种方法是使用回调: 函数getCurrentUser(回调){ $.ajax({ 键入:“获取”, url:“/set_user”, 成功:功能(结果){ var currentUserId=result.id; 如果(回调) 回调(currentUserId); }, 错误:函数(err){ 控制台日志(err); } }) }; 函数displayResult(用户ID){ log(“当前用户id为”+用户id); }
getCurrentUser(显示结果)代码>您的console.log发生在ajax启动之前finished@naortor你说得对,我在控制台上看到了。我如何解决这个问题?最终目标是能够调用此函数,在其他函数中使用变量currentUserId,您可以设置
async:false
的可能重复项,如果您想使其同步,或者在ajax启动之前响应receivedyour console.log发生时,使用回调模式执行某项操作,只需遵循此链接即可finished@naortor你说得对,我是在我的控制台里看到这个。我如何解决这个问题?最终目标是能够调用此函数,并在其他函数中使用变量currentUserId。您可以设置async:false
的可能重复项,如果您想使其同步,或者在收到响应时使用回调模式执行某项操作,请按照此链接进行精确的示例。我认为这是解决方案。我更新了它,现在发现一个错误无法读取未定义的属性“done”。解决这个错误。关于这个问题有什么想法吗?谢谢您使用的是哪个版本的jQuery?尝试使用then
而不是done
。这样也不起作用。应用程序中已经使用了.done,所以这是可能的,但是整个函数都没有定义。Jquery版本:1.11.3我无法找到我为复制您的答案而写的内容与您的实际答案之间的差异。所以我复制粘贴,瞧。一定是有什么事让人毛骨悚然。非常感谢你!!它现在工作得很好。:)我认为这就是解决办法。我更新了它,现在发现一个错误无法读取未定义的属性“done”。解决这个错误。关于这个问题有什么想法吗?谢谢您使用的是哪个版本的jQuery?尝试使用then
而不是done
。这样也不起作用。应用程序中已经使用了.done,所以这是可能的,但是整个函数都没有定义。Jquery版本:1.11.3我无法找到我为复制您的答案而写的内容与您的实际答案之间的差异。所以我复制粘贴,瞧。一定是有什么事让人毛骨悚然。非常感谢你!!它现在工作得很好。:)