Javascript Can';无法在http请求函数上获取全局变量
这应该很容易,但我被卡住了。 我想将函数的结果作为全局变量返回。这里有我的函数clearbit(),我为它创建了全局变量clearbit_role 但是我不能在函数外警告这个变量。。。有线索吗? 谢谢 编辑:在此处添加小提琴: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_角色
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)