Javascript Can';无法在http请求函数上获取全局变量

Javascript Can';无法在http请求函数上获取全局变量,javascript,variables,scope,Javascript,Variables,Scope,这应该很容易,但我被卡住了。 我想将函数的结果作为全局变量返回。这里有我的函数clearbit(),我为它创建了全局变量clearbit_role 但是我不能在函数外警告这个变量。。。有线索吗? 谢谢 编辑:在此处添加小提琴: 谢谢 为什么不在函数外部创建变量clearbit_角色 var clearbit_role ; function clearbit (web){ var url = "myurl"; var request = new XMLHttpRequest()

这应该很容易,但我被卡住了。 我想将函数的结果作为全局变量返回。这里有我的函数clearbit(),我为它创建了全局变量clearbit_role

但是我不能在函数外警告这个变量。。。有线索吗? 谢谢

编辑:在此处添加小提琴:


谢谢

为什么不在函数外部创建变量clearbit_角色

 var  clearbit_role ;
   function clearbit (web){
  var url = "myurl";
  var request = new XMLHttpRequest();
  request.onreadystatechange = function() {
    if (request.readyState === 4 && request.status == 200) {
        var response = JSON.parse(request.responseText.replace('[','').replace(']',''));
        var clearbit_fullname = response.name.fullName;
        clearbit_role = response.role;
    } 
    } 
  request.open('GET', url, true);
  request.setRequestHeader("authorization", "Bearer sk_1be5451252ba4e31518e9b")
  request.send();
}
clearbit()

alert(clearbit_role)

问题

不在作用域中,
clearbit\u角色
变量已经是全局变量。但是问题是
clearbit
函数需要一段时间才能发出http请求

因此,
alert
函数在
clearbit\u角色
变量声明之前运行

解决方案

使用函数在AJAX请求完成后运行

函数clearbit(web){
var url=“myurl”;
var request=new XMLHttpRequest();
request.onreadystatechange=函数(){
if(request.readyState==4&&request.status==200){
var response=JSON.parse(request.responseText.replace('[','').replace(']','');
var clearbit_fullname=response.name.fullname;
clearbit_role=response.role;
在AjaxDone之后运行的一些功能(clearbit_角色);
} 
} 
打开('GET',url,true);
请求.setRequestHeader(“授权”,“承载sk_1BE54511252BA4E31518E9B”)
request.send();
}
clearbit()
//但是,在这个函数中完成AJAX之后,您想要获得乐趣的所有代码
函数在AjaxDone之后运行的函数(clearbit\u角色){
警报(clearbit_角色)
}

它是异步的,因此在执行完成之前调用
警报(clearbit\u角色)
。在clearbit\u role=response.role之后添加console.log(response.role)中执行您的工作;要查看response.role是否未定义,在onreadystatechange中工作时是否确实有效,但我需要将clearbit_角色返回到另一个函数。因此,在
onreadystatechange
中调用该函数。同步调用被折旧,您需要相应地对代码建模。不,这不是问题所在。你不需要那样做。以非常简单的代码为例
 var  clearbit_role ;
   function clearbit (web){
  var url = "myurl";
  var request = new XMLHttpRequest();
  request.onreadystatechange = function() {
    if (request.readyState === 4 && request.status == 200) {
        var response = JSON.parse(request.responseText.replace('[','').replace(']',''));
        var clearbit_fullname = response.name.fullName;
        clearbit_role = response.role;
    } 
    } 
  request.open('GET', url, true);
  request.setRequestHeader("authorization", "Bearer sk_1be5451252ba4e31518e9b")
  request.send();
}
clearbit()

alert(clearbit_role)