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

Javascript 在ajax请求中修改的变量在执行后不可见,javascript,ajax,variables,jquery,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) {

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

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为什么不保留数据:/

这是因为在本例中,
$.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);
      }
   } );
这是因为在本例中,
$.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);
      }
   } );

这是因为您没有等待
$.ajax()
调用完成

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

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

这是因为您没有等待
$.ajax()
调用完成

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

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

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

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


我会让ajax调用保持现在的异步状态。并且只在ajax回调中使用
resu
,因为它在回调中获取其值。

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

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


我会让ajax调用保持现在的异步状态。并且只在ajax回调中使用
resu
,因为它在回调中获取其值。

您的变量不是真正的全局变量,它是在带有“var”的函数中定义的,因此它是局部(对于函数)变量。您的变量不是真正的全局变量,它是在带有“var”的函数中定义的,因此它是局部(对于函数)变量。