2013-07-18 27 views
1

声明全局变量(jQuery的):如何将值赋给全局变量并在jquery/javascript中的其他函数中使用它?

$.mynamespace = { myVar : "something" }; 

我会做一些操作使用XML,之后将一些其他的值赋给myVar的和调用功能测试()将再次改变的价值myVar的。然后我想要var的值必须与我在test()函数中更改的值相同。

$(document).ready(function(){ 
     //Some XML oprations 
     $.get("students.xml",{},function(xml){ 
      $.mynamespace.myVar="ewewewewewew"; 
      test(); 
     }); 
     //value of $.mynamespace.myVar must be test 
     alert($.mynamespace.myVar); 
    }); 

    function test(){ 
     alert($.mynamespace.myVar); 
     $.mynamespace.myVar="test"; 
    } 
+0

可能重复[如何从AJAX调用返回响应?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call ) – adeneo

+0

也许试着把这段代码放在你的代码的顶部:var $ .mynamespace = {} –

+2

'$ .get'是异步的,问题不在于变量是否为全局变量,而是ajax调用hasn当你尝试使用这个变量的时候没有完成。 – adeneo

回答

1

阿贾克斯站作为异步 JavaScript和XML,这意味着调用是异步的。当AJAX完成时,调用成功函数。它可以随时调用。所以当JavaScript到达代码它只是通过,当ajax准备好成功函数被调用。

有2种解决方案。

  1. 你做可变的东西时,Ajax请求在SUCESSFUL功能
  2. 你做一些与Ajax代码后变量做到,但你需要使用PARAM async: false这使得阿贾克斯NO AJAX :)但是某种SJAX
+0

注意它不是“最好”的解决方案,您使用SJAX,而不是AJAX。 – Robert

0

可以使用封闭的,而不是全局变量做同样的事情

(function($){ 
    var myNs = {}; 

    $(document).ready(function(){ 

    //Some XML oprations 
    $.get("students.xml",{async: false},function(xml){ 
     myNs.myVar="ewewewewewew"; 
     test(); 
    }); 
     //value of $.mynamespace.myVar must be test 
     alert(myNs.myVar); 
    }); 

    function test(){ 
     alert(myNs.myVar); 
     myNs.myVar="test"; 
    } 
})(jQuery); 
相关问题