2011-02-11 74 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