2013-02-12 31 views
1

之外,我有以下功能:JavaScript變量不更改的功能範圍

function loginStudent() { 
    var advisorKEY = "<dtml-var expr="py_get_alias()">"; 
    var studentKEY = "<dtml-var SID>"; 
    var URL = "py_logging_sessionOpen?AdvisorKEY=" + advisorKEY + "&StudentKEY=" + studentKEY; 
    key = ""; 
    $j.get(URL, function(data) { 
     key = data; 
    }); 
    alert(key); 
} 

py_loggin_sessionOpen只是我的服務器上運行的Python腳本。
它返回一個單一的字符串。我需要該腳本的響應來確定下一個動作。該腳本完美地返回值,並且我可以通過在function(data)中輸入alert來容易地檢查該值get

我的主要問題是:如何獲取要在功能(數據)範圍之外更改的鍵值?

我假定,因爲我在外部定義它會作爲一個全局變量。 將它移到loginStudent()之外也不能解決問題。

任何想法?

+0

你想在另一個功能中使用它嗎? – 2013-02-12 15:29:37

+4

所有依賴於異步請求結果的邏輯都必須在請求的回調函數中處理。 'key'的值由async設置之前調用'alert(key)'。功能。 – 2013-02-12 15:30:19

回答

6

$j.get()將會是一個異步調用。這意味着它會觸發,其餘的執行仍在繼續。需要任何依賴該調用的回調來完成,像這樣:

$j.get(URL, function(data) { 
    key = data; 
    alert(key); 
}); 

如果一切很好,你會看到你所期望的價值。

+0

啊!咄。謝謝。我會在StackOverflow讓我接受你的回答。 – 2013-02-12 15:37:02

0

您的代碼的問題是$j.get異步執行。這就是你將回調傳遞給它的原因。

如果你想編寫異步代碼同步,那麼你應該閱讀這個答案:https://stackoverflow.com/a/14809354/783743

編輯:看來你已經創建了一個由不var宣佈它稱爲key全局變量。因此只要在回撥後稱爲,它應該在其他功能中可見。

你願意爲我們提供這些其他功能嗎?