2016-11-07 19 views
0

私はasync:falseを使用しています。したがって、success関数の場合、関数からの応答を取得するまで待つ必要があり、success関数の次のコードの実行を停止する必要があります。非同期:偽が動作しない

ただし、それに続くコードを実行します。 asyncプロセスをロックしてはいけませんか?今度はmycaseで、私は$('#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'は非推奨ですが、Promises/Deferredと混在させることはできません。しかし、それでもやはり悪い考えです。 – Alnitak

+0

これは私のために働いています。 –

+0

FSVO "working" ... – Alnitak

2

async: falseは、サブオブジェクトdataに含まれていない$.ajaxに渡されるメインオブジェクトに含まれている必要があります。

つまり、同期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あなたの直ぐの問題のために、私はやった。 asyncを適切に使用したい場合は、そこに他にもたくさんの質問があります。 – 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(''); 
     } 
    }); 
関連する問題