3

オプションを使用せずにjQueryでJSONを同期的に取得することは可能async: falseですか(これは明らかに非推奨になっています)? また、すべてを成功関数に入れないようにしたいと思います。

4

3 に答える 3

3

いいえ、。以外のオプションはありませんasync: false。あったらお勧めしません。

成功関数の場合、実行される別の関数を渡すだけです。

例えば:

$.ajax( {
    url: myUrl,
    type: 'POST',
    success: myFunc
} );

function myFunc( datas ) {
    // do what you should do in a success function
}
于 2012-07-03T14:40:40.583 に答える
3

Deferred ObjectjQueryのajaxメソッドは(jQuery 1.5+)を返すため、次のように書くこともできます

$.ajax({
    url: myUrl,
    type: 'POST'
}).done(function() {
  // do what you should do in a success function
});
于 2012-07-03T14:48:41.277 に答える
1

合理的ではありません。asyc:falseを使用せずにリクエストを強制的に同期させようとすることは可能ですが、私の意見では労力の無駄です。async:trueを使用したいほとんどすべてのシナリオで、async:falseを使用した場合と同じように、async:trueを使用して同じことをすべて実行できます。コードをどのように構成するかが問題になります。

AJAXリクエストを実行するソースファイルの現在のバージョンを確認する場合: https ://github.com/jquery/jquery/blob/master/src/ajax/xhr.js

設定オブジェクトの非同期フィールドが引き続き使用されていることがわかります。このフィールドは、XMLHttpRequestオブジェクトのOpenメソッドに直接渡されます。したがって、デフォルトの実装を使用して実行できるのは、「async:false」に設定することだけです。

if ( s.username ) {
    xhr.open( s.type, s.url, s.async, s.username, s.password );
} else {
    xhr.open( s.type, s.url, s.async ); 
}

今、あなたが本当に頑固で、「async:false」を設定せずにこれをやりたいと仮定すると、本当に太字になり、カスタムajaxTransportを記述して、カスタムデータ型で登録できます。

これは、sendおよびabortメソッドを使用してカスタムトランスポートオブジェクトを作成し、それをdataType'mine'に登録する私が作成した例です。したがって、ajaxSettingsオブジェクトでdataType'mine'を指定すると、jQueryに組み込まれているものではなく、このカスタムトランスポートが使用されます。http://jsfiddle.net/xrzc7/ 2つのajaxリクエストがあることに注意してください。1つはアラートを表示する「mine」dataTypeを使用し、もう1つはアラートを表示しないデータ型を使用しません。この例の私のajaxTransportは完全には機能していません。これは、独自の送信関数でスワップできることを示すためだけのものです。

私の意見では本当に必要ではないので、jQuery用に独自のajaxTransportを作成することはお勧めしませんが、あなたの質問に答えるために、オプションとして提案しています。

jqueryのデフォルトのajaxTransportがどのように記述されるか、およびカスタムajaxTransportを記述するときに、設定オブジェクトおよびコールバックメソッドとどのように相互作用するかに細心の注意を払う必要があります。send関数は、XMLHttpRequest.openメソッドの非同期パラメーターとして明らかに「false」値を強制します。

https://github.com/jquery/jquery/blob/master/src/ajax/xhr.js-これは、デフォルトのajaxTransportメカニズムの現在のソースコードです。

これが役立つか、おそらく常にasync:trueを使用するように説得することを願っています。:-D

于 2012-07-03T15:25:41.703 に答える