在执行之后,在ajax请求中修改的变量不可见

时间:2011-02-11 10:00:24

标签: javascript ajax variables jquery

我的变量是全局变量,但她没有显示相同的结果:

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不保存数据:/

3 个答案:

答案 0 :(得分:2)

首先,您的resu变量不是全局变量。它位于checkLiveRdv函数范围内的本地。 javascript中的全局变量是在没有var关键字的情况下声明的。但是,省略全局变量是一种很好的做法。

出现的第一个警告显示一个无价值的未定义resu。异步$.ajax稍后完成,当它填充resu的值时,它会正确显示。

我会让ajax调用异步,就像现在一样。并且只在ajax回调中使用resu,因为它在其中获取了它的值。

答案 1 :(得分:1)

这是因为您没有等待$.ajax()来电完成。

如果您需要同步请求,请将sync选项设置为false:

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

答案 2 :(得分: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);
      }
   } );