web-dev-qa-db-ja.com

jQuery.post().done()および成功:

jQuery _jQuery.post( )のドキュメント

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.post( "example.php", function() {
  alert( "success" );
})
  .done(function() {
    alert( "second success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "finished" );
});

// Perform other work here ...

// Set another completion function for the request above
jqxhr.always(function() {
  alert( "second finished" );
});

success:パラメーターとjqXHR.done( )メソッドの違いは何ですか。存在しない場合、jqXHR.done( )メソッドのポイントは何ですか?

38
KaekeaSchmear

successおよびerrorおよびcompleteのコールバック関数のみを使用するjQuery。

それから、彼らはjqXHRオブジェクトでpromiseをサポートすることにしました。それは、promise APIの精神で.done().fail().always()などを追加したときです。これらの新しいメソッドは、コールバックとほぼ同じ目的を果たしますが、形式が異なります。コーディングスタイルに適したAPIスタイルを使用できます。

人々が約束にますます精通し、より多くの非同期操作がその概念を使用するにつれて、私はますます多くの人々が将来的に約束APIに移行するのではないかと疑っていますが、その間jQueryは両方をサポートします。

.success()メソッドは、一般的なpromiseオブジェクトのメソッド名を支持して廃止されました。

jQuery doc から、さまざまなpromiseメソッドがコールバックタイプにどのように関連するかを確認できます。

jqXHR.done(function(data、textStatus、jqXHR){});成功コールバックオプションの代替コンストラクトである.done()メソッドは、非推奨のjqXHR.success()メソッド。実装の詳細については、deferred.done()を参照してください。

jqXHR.fail(function(jqXHR、textStatus、errorThrown){});エラーコールバックオプションの代替構成、.fail()メソッドが置き換え非推奨の.error()メソッド。実装の詳細については、deferred.fail()を参照してください。

jqXHR.always(function(data | jqXHR、textStatus、jqXHR | errorThrown){});完全なコールバックオプションの代替構成、.always ()メソッドは、非推奨の.complete()メソッドを置き換えます。

リクエストが成功した場合、関数の引数は.done()の引数と同じです:data、textStatus、jqXHRオブジェクト。失敗したリクエストの場合、引数は.fail()の引数と同じです:jqXHRオブジェクト、textStatus、およびerrorThrown。実装の詳細については、deferred.always()を参照してください。

jqXHR.then(function(data、textStatus、jqXHR){}、function(jqXHR、textStatus、errorThrown){});の機能を組み込む.done()および.fail()メソッド。(jQuery 1.8以降)基本となるPromiseを操作できます。実装の詳細については、deferred.then()を参照してください。

ES6 Promises標準により準拠した方法でコーディングしたい場合、これらの4つのオプションのうち.then()のみを使用します。

54
jfriend00

コールバック関数よりもPromisesを好む理由は、複数のコールバックを持ち、Callback Hellのような問題を避けるためです。

コールバック地獄(詳細については、 http://callbackhell.com/ を参照):非同期javascript、またはコールバックを使用するjavascriptは、直観的に正しく取得するのが困難です。多くのコードは次のようになります。

asyncCall(function(err, data1){
    if(err) return callback(err);       
    anotherAsyncCall(function(err2, data2){
        if(err2) return calllback(err2);
        oneMoreAsyncCall(function(err3, data3){
            if(err3) return callback(err3);
            // are we done yet?
        });
    });
});

Promiseを使用すると、上記のコードは次のように書き換えられます。

asyncCall()
.then(function(data1){
    // do something...
    return anotherAsyncCall();
})
.then(function(data2){
    // do something...  
    return oneMoreAsyncCall();    
})
.then(function(data3){
    // the third and final async response
})
.fail(function(err) {
    // handle any error resulting from any of the above calls    
})
.done();
14

.done().success()はどちらもコールバック関数であり、基本的に同じように機能します。

ドキュメント です。違いは、.success()はjQuery 1.8で非推奨になったことです。代わりに.done()を使用する必要があります。

リンクをクリックしたくない場合:

廃止予定通知

JQuery 1.5で導入されたjqXHR.success()jqXHR.error()、およびjqXHR.complete()コールバックメソッドは、jQuery 1.8で非推奨になりました。最終的な除去のためにコードを準備するには、代わりにjqXHR.done()jqXHR.fail()、およびjqXHR.always()を使用します。

8
royhowie

ドキュメントから

jqXHR.done(function(data、textStatus、jqXHR){});

成功コールバックオプションのalternativeコンストラクト、.done()メソッドは、deprecatedjqXHR.success()メソッド。実装の詳細については、deferred.done()を参照してください。

ポイントは、成功コールバックオプションの単なる代替であり、jqXHR.success()は非推奨です。

0
xdazz