Javascript 如何将xhr响应分配给变量?

Javascript 如何将xhr响应分配给变量?,javascript,asynchronous,dojo,xmlhttprequest,internet-explorer-9,Javascript,Asynchronous,Dojo,Xmlhttprequest,Internet Explorer 9,我在下面写了这段代码,非常简单,它需要发出一个xhr请求,然后将响应分配给一个变量 function myFunction(url){ var myVariable; var myRequest = dojo.xhrGet({ url: url, handleAs: "json" }).then(requestSucceeded, requestFailed); function requestSucceeded(respo

我在下面写了这段代码,非常简单,它需要发出一个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对象外部的变量,我从控制台看到两条消息,如:

将返回到浏览器的值:未定义

原始响应的值:一些值

我知道这是由JavaScript的非阻塞特性造成的,因此代码一直在运行,即使响应尚未到达回调,这使得代码末尾的myVariable未定义

但我不明白的是,为什么它在Chrome和Firefox中运行良好,为什么Chrome会等到收到响应后再继续执行其余的代码

所以我的问题是,我怎样才能让它在IE9中工作


非常感谢

我在所有浏览器中都得到了
未定义的
——这就是我认为它应该做的。看看IE9+8做了什么,这实际上是我希望这个脚本在所有浏览器中都能做的。正如您所指出的,您启动了一个异步调用,在返回
myVariable
(因此它是
未定义的
)之前,不应该完成该调用。您目前是否在本地环境中工作?你的
url
是本地的还是在线的?可能响应被缓存,因此会立即返回?您上面引用的第一个行为就好像您将sync设置为true(请参阅)。如果第一组浏览器缓存了文件,可能会立即触发事件?尝试清除你的Chrome缓存,看看你得到了什么行为。除了@Qantas94Heavy链接到的问题外,如果你要使用延迟(在另一个答案中解释),Dojo还有一个实现: