2011-02-11 36 views
0

我的變量是全球性的,但她不顯示相同的結果:變量Ajax請求修改已執行後是不可見的

function checkLiveRdv(salle, jour, dateus, heure) 
{ 
var resu; 
    var urlaction = myUrl; 

    $.ajax({ 
     type: "POST", 
     dataType: "json", 
     url: urlaction, 
     data: myDatas, 
     success: function(message) 
     { 

     data = $.parseJSON(message); 
     if(data['nb']==1) 
      resu = "ok"; 
     else resu = "pasok"; 
     //this alert display the good result 
     alert (resu); 

     } 
    }); 
    //this alert display 'undefined', why ??? 
    alert(resu); 
} 

我不知道爲什麼RESU不守數據:/

+1

你變量不是一個真正的全局變量,它是在一個函數中用'var'定義的,所以它是一個局部變量(函數)。 – gnur 2011-02-11 10:06:36

回答

1

也就是說becouse你是不是等待$.ajax()調用完成。

如果您需要同步要求,同步選項設置爲false:

$.ajax({ 
    type: "POST", 
    async: false, 
    ... 
0

這是因爲$.ajax()在這種情況下是異步的。修改$.ajax()包括async: false

$.ajax({ 
     type : 'POST', 
     dataType: 'json', 
     url  : urlaction, 
     data : myDatas, 
     async : false, 
     success : function(message) { 
     data = $.parseJSON(message); 
     if(data['nb']==1) 
      resu = "ok"; 
     else resu = "pasok"; 
      alert (resu); 
     } 
    }); 
+0

確實,它現在可行! – bahamut100 2011-02-11 10:37:26

2

首先,你resu變量不是全局性的。它位於checkLiveRdv函數的範圍內。 javascript中的全局變量是在沒有var關鍵字的情況下聲明的。但是,省略全局變量是一種很好的做法。

出現的第一個警報顯示一個尚未定義的值,但未定義resu。異步$.ajax稍後完成,並填充resu的值時,它會正確顯示。

我會離開現在的ajax調用異步。並且僅在ajax回調函數中使用resu,因爲它在其中獲取其值。

+0

THANKs的提示:) – bahamut100 2011-02-11 10:37:06