$ .ajax成功范围如何运作?

时间:2015-08-31 14:23:28

标签: javascript jquery ajax xml

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);

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  1. 声明变量myXML(= null)
  2. 启动 $ .ajax请求(并声明该怎么做 - 最后,在将来某个时候 - 成功完成)
  3. 记录myXML
  4. 的内容

    请注意,除非在第3点之前调用success回调(不太可能),myXML在此时仍为null

    换句话说,当调用回调时,myXML将被更新。在此之前,这是你在第1点声明的内容,即null。代码完全符合您的要求,但它不是您想要的东西。