2015-08-31 56 views
-1
var myXML; 
$.ajax({ 
    type:'GET', 
    url:'http://localhost:8080/someCGIhere/', 
    datatype:'xml', 
    success: function(xml){ 
    console.log('Success!'); 
    myXML = $(xml).find('SomeThing').text(); 
    //1) Prints out the myXML value   
    console.log("myXML = " +myXML); 
    } 
}); 

//2) Prints out undefined 
console.log('Result = '+myXML); 

为什么响应没有存储在成功范围之外,考虑到它将值赋给一个在范围外声明的变量?

+6

'$ .ajax'生成一个异步请求,所以'// 2'在'// 1'之前执行。您应该能够在控制台中的'Success!'前看到Result = undefined'。 – Hacketo

+0

我确实看到它在控制台中,现在我明白了!在我心中,javascript必须等待调用完成,然后才能在代码中顺序执行,谢谢! @Hacketo –

+0

对不起哈克托,我在回答之前没有看到您的评论 – Ello

回答

2

第二个console.log在成功函数中的第一个之前被执行,因为ajax是一个异步进程。您需要使用回调函数来确保第二个console.log在ajax调用后执行,或者您可以使用promises

1

让我们来看看您的代码在做什么。

  1. 声明变量myXML(= NULL)
  2. 开始的$就请求(并宣布做什么,如果它 - 最终,在未来的某个时刻 - 成功完成)
  3. 日志的myXML

注意的内容,除非success回调点3.之前调用(这是非常不太可能),myXML在那时仍然是null

换句话说,当回调被调用时,myXML应该被更新。在此之前,您宣称它是在第1点,即null。代码完全按照你所要求的做,但它不是你想要的东西。