1

これらの2つのコード(1)(2)は、私には同じように機能するようです。

私の質問は次のとおりです:
1)これらの2つのコードは同等ですか?
2)はいの場合、なぜですか?そうでない場合、私は何を好むべきで、なぜですか?


(1)

$.ajax({
    url: backendRouter.generate('feedback_send'),
    type: 'POST',
    dataType: 'json',
    data: data
    success: callback,
    done: function () {
        // some code
    }
});

(2)

$.ajax({
    url: backendRouter.generate('feedback_send'),
    type: 'POST',
    dataType: 'json',
    data: data
    success: callback
}).done(function () {
    // some code
});
4

1 に答える 1

3

はい、2つのコードは同等ですが、(誤って?)success: callback後者に残した点が異なります。

ただし、IMHOは後者が推奨されます。これは、遅延オブジェクトは、に直接コールバックを提供するよりもはるかに柔軟性があるため$.ajaxです。

特に、遅延オブジェクトを使用すると、AJAX呼び出しの開始とその呼び出しの結果の処理の間で、ロジックと責任をより適切に分離できます。また、一部のAJAXヘルパー関数はコールバックをサポートしていませんerror。私が書いた場合:

function doAjax() {
    return $.get(...);
}

次に、これらのハンドラーを関数に渡すことなく、任意の数のdoneハンドラーfailをその関数呼び出しの結果doAjaxに付加できます。

また、、などを使用して、返されたpromise()オブジェクトを他のPromiseと組み合わせて、複数の非同期イベント(他のAJAX呼び出し、タイマー、アニメーションなどを含む)間の非常に強力な同期をとることもできます。私はそれを使用してそれを行うことはできません$.when()$.pipe()success:

于 2012-08-23T08:30:15.437 に答える