这是一个程序,它调用ajax从http响应的头部读取一个值,并设置一个名为_ecpop的变量,并将其用于以后的操作......
所以我将全局名为_ecpop的变量定义为
var _ecpop="";
然后这里是ajax调用代码:
if (typeof XMLHttpRequest != "undefined") {
_ec_req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
_ec_req = new ActiveXObject("Microsoft.XMLHTTP");
}
// make the request
_ec_req.open("GET", requestString, true);
// function to deal with response
_ec_req.onreadystatechange = function() {
if (_ec_req.readyState==4)
{
if (_ec_req.status==200)
{
var respHeaders = _ec_req.getAllResponseHeaders();
// strip out unnecessary headers
respHeaders = respHeaders.replace (/\n/g,"|X|");
var beg = respHeaders.indexOf("ECAcc (");
_ecpop = respHeaders.substring(beg+7,beg+10);
//make an if statement here...
console.log(_ecpop);
}
}
}
console.log(_ecpop);
,其余代码使用_ecpop。
问题是浏览器使用_ecpop =“”执行其余代码。即第一个第二个console.log(_ecpop);返回空,然后是第一个console.log(_ecpop);返回正确的值。
有没有人知道如何绕过它?这太刺激了......
谢谢,
阿米尔。
答案 0 :(得分:1)
AJAX(Asyncronous Javascript和XML的首字母缩写)本质上是异步的。这意味着它在Javascript引擎在脚本中遇到它时开始执行,但脚本的其余部分继续处理而不等待AJAX调用完成。
您可以通过指示AJAX调用同步操作来绕过此行为:
_ec_req.open("GET", requestString, false);
将false
设置为open()
的第三个参数将提供您所请求的行为。