1. ホーム
  2. javascript

[解決済み] jqueryの"$.post "リクエストを同期させる方法 [重複]。

2022-04-21 04:18:05

質問

今までずっとググってバグフィックスリストにこのエラーを避けていたのですが、ついに最後の最後、バリデーションが成功したかどうかを表明するために関数をtrue/falseで返すようにしなければならないところまで来ました。

私はajaxを使って、あるフィールドをすでにdbにあるフィールドと比較しているのですが、デフォルトでは $.post() メソッドは非同期で処理を行います。

の呼び出しの中で変数をセットしています。 onSuccess で、呼び出し側のメソッドはこのせいでレスポンスを得られないので、私のすべてのjs/jqueryはpageLoadで失敗します...。私は、もし私がまだ $.post メソッドを使用します。

どのように解決するのですか?

jQuery < 1.8

を使用することをお勧めしてもよろしいでしょうか? $.ajax() の代わりに $.post() の方がよりカスタマイズしやすいからです。

を呼び出している場合 $.post() , 例えばこんな感じです。

$.post( url, data, success, dataType );

に変えると、その $.ajax() に相当する。

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});

に注意してください。 async:false の末尾にある $.ajax() パラメータオブジェクトを作成します。

ここでは、完全な詳細である $.ajax() のパラメータがあります。 jQuery.ajax() - jQuery API Documentation .


jQuery >=1.8 "async:false"非推奨のお知らせ

jQuery >=1.8 は http リクエスト中は UI をブロックしないので、リクエストが処理されている間はユーザーとの対話を停止するような回避策をとる必要があります。例えば

  • プラグインを使用する。 ブロックUI ;
  • を呼び出す前に手動でオーバーレイを追加します。 $.ajax() を実行し、AJAXの .done() コールバックが呼び出される。

をご覧ください。 この回答 を例に挙げて説明します。