2013-05-08 125 views
0

這makinkg我瘋了,我不能得到外部變量獲取內部數據JavaScript變量沒有更新的價值

很抱歉的壞格式化我從手機寫作,如果有人能與格式helpme了我讚賞它

window.getReasons = function(line) { 
    var $reasons; 

    $reasons = ""; 
    $.get(window.location.protocol + "//" + window.location.host + "/" + "allLineReasons.js?line=" + line, function(returnData) { 
     $reasons = returnData.toString(); 
     return console.log("T_T ----->" + returnData.toString()); 
    }, "html"); 
    console.log($reasons); 
    return $reasons; 
    }; 
+0

返回我不遞延對象;知道你的「外部變量」,並表示「內部數據」你能有什麼要具體說明你想要做什麼? – 2013-05-08 19:07:22

+0

@EH_warch,看看jbabey的鏈接。 $ .get是異步的,你不應該得到正確的值返回在getReasons() – Ben 2013-05-08 19:08:54

+0

這不會工作,因爲你是在它被設置爲其新值之前返回原因變量。請記住,這是一個異步調用 – Ibu 2013-05-08 19:09:02

回答

3

讓你瞭解最重要的事情是,$.get()默認情況下異步的。那麼,是什麼情況是,跟隨您的來電get()console.log()return語句執行前的get()返回它的值。

你可能看到這裏利用when()方法來處理從get()

window.getReasons = function(line) { 
    var reasons = ''; 
    $.when(
     $.get(window.location.protocol + "//" + window.location.host + "/" + "allLineReasons.js?line=" + line) 
    ).done(function(jqxhr) { 
     data = jqxhr[0]; 
     reasons = data.toString(); 
    }); 
    console.log(reasons); 
    return reasons; 
} 
+0

我不知道when函數,並沒有想到完成。謝謝! – 2013-05-08 22:02:11

+0

有沒有辦法在覈心JavaScript中做到這一點? – rashadb 2015-02-09 19:53:30

1

$原因將不會更新,直到服務器上的GET完成並返回響應之後。但是你的console.log會在請求發出後立即執行。