2016-11-07 141 views
0

我正在使用async:false。因此,在success函数的情况下,它应该等待,直到它获得函数的响应,并且应该停止执行函数后面的代码。Async:False not working

但是它执行它后面的代码。 async不应该锁定进程?现在,我正在制作$('#val1loading').text('loading'),它必须继续显示加载,直到它从ajax调用中获得成功为止。但事实并非如此。

$("#val").change(function() { 
$('#val1loading').text('loading'); 

if ($('#val').val() != '') { 
    $.ajax({ 
     url: "Functions.php", 
     dataType: 'json', 
     data: { 
      async: false, 
      'link': $('#val').val() 
     }, 
     success: function(result) { 
      $("#val1").val(result[0]); 

     }, 
     error: function(xhr, status, error) { 
      $("#val1").val(''); 

     } 
    }); 
} else { 
    //some code 
} 
$('#val1loading').text(''); 

});

+0

您可以将'$( '#val1loading')文本( '');'内成功右 –

+0

不是'异步:假的,'应该是'data'之外? –

回答

0

异步是deprecated.Inorder在所有的情况下,解决你的问题,可以用$( '#val1loading')文本( '')。

$("#val").change(function(){ 
$('#val1loading').text('loading'); 

if($('#val').val() != '') { 
    $.ajax({ 
      url: "ajaxFunctions.php", 
      dataType: 'json', 
      data: {'update': 'parser','link': $('#val').val()}, 
      success: function (result) { 
       $('#val1loading').text(''); 

       $("#val1").val(result[0]); 


      }, 
      error: function(xhr, status, error) { 
       $("#val1").val(''); 
       $('#val1loading').text(''); 


} 
     }); 
    }else 
{ 
    //some code 
} 
//$('#val1loading').text(''); 
+0

'async:false' is _not_reatated - 但是你不能将它与Promises/Deferred混合。不过,这仍然是一个糟糕的主意。 – Alnitak

+0

这对我有用。 –

+0

FSVO“working”... – Alnitak

2

async: false应在主对象传递给$.ajax,不包含在data子对象内。

也就是说,使用同步AJAX几乎总是一个糟糕的主意,正是因为它像你在问题中提到的那样“锁定了进程”。

习惯了编写正确异步代码,其中在节目中的每一个动作通过回调发生的事件(如AJAX完成)的结果,或者更好的是用“承诺”,例如:

$('#val').on('change', function() { 
    var $val1 = $('#val1'); 
    var $loading = $('#val1loading'); 
    var val = this.value.trim(); 

    if (val.length > 0) { 
     $loading.text('loading'); 
     $.ajax({ 
      url: "Functions.php", 
      dataType: 'json', 
      data: { link: val }, 
     }).then(function(result) { 
      $val1.val(result[0]); 
     }).fail(function(xhr, status, error) { 
      $val1.val(''); 
     }).always(function() { 
      $loading.text(''); 
     }); 
    } 
}); 
+0

所以你可以建议一个解决方案? –

+0

@RamMalhotra我做了,为您的直接问题。如果你想正确使用异步,那么已经有数千个与此相关的其他问题。 – Alnitak

0

我认为不要像这样使用async false。 将其更改为:

$.ajax({ 
     url: "Functions.php", 
     dataType: 'json', 
     data: {'link': $('#val').val()}, 
     async:false, 
     success: function (result) { 
      $("#val1").val(result[0]); 
     }, 
     error: function(xhr, status, error) { 
      $("#val1").val(''); 
     } 
    });