2013-07-18 75 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); 
相關問題