我在下面编写了这段代码,它非常简单,它的剂量是xhr请求,然后将响应分配给变量。
function myFunction(url){
var myVariable;
var myRequest = dojo.xhrGet({
url: url,
handleAs: "json"
}).then(requestSucceeded, requestFailed);
function requestSucceeded(response){
myVariable = response;
console.log('Value from the original response: ' + myVariable);
}
function requestFailed(error){
console.log("Error: ", error.message);
}
console.log('Value that will be returned to browser: ' + myVariable);
return myVariable;
}
它在Chrome,Firefox和IE 10中运行良好,我可以从控制台看到两条消息:
原始回复的值:某个值
将返回给浏览器的值:某个值
但问题是当我在IE 9或8中运行它时,它不会将响应分配给xhr对象之外的变量,我看到来自控制台的两条消息如下:
将返回给浏览器的值:undefined
原始回复的值:某个值
我知道它是由JavaScript的非阻塞性质引起的,因此即使响应尚未进入回调,代码仍在继续前进,这使得代码末尾的myVariable未定义。
但是我无法理解为什么它在Chrome和Firefox中正常运行,为什么Chrome会等到收到回复然后继续执行其余的代码。
所以我的问题是如何让它在IE 9中运行?
非常感谢!