191

私はこのようにコーディングしました:

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID },
    success: function (data) {
        $('#CityID').html(data);
    },
    error: function (ajaxContext) {
        alert(ajaxContext.responseText)
    }
});

しかし、最後にjQueryの.ajax()ドキュメント.done()を見ると、以下のようにコーディングする必要があるか、少なくともaと.fail():を追加することが示唆されているようです。

var request = $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
});

request.done(function (data) {
    xxx;
});
request.fail(function (jqXHR, textStatus) {
    xxx;
});

アップデート

私がこのようにコーディングした場合、それは同じですか、それとも3つに分割することにいくつかの利点がありますか?

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
}).done(function (data) {
    xxx;
}).fail(function (jqXHR, textStatus) {
    xxx;
});
4

4 に答える 4

182

user2246674が述べているように、ajax関数のパラメーターとしてsuccessおよびを使用することは有効です。error

前例の答えと一致させるために、ドキュメントを読んでください:

非推奨の通知

jqXHR.success()、jqXHR.error()、およびjqXHR.complete()コールバックは、jQuery1.8で非推奨になります。最終的な削除に備えてコードを準備するには、代わりにjqXHR.done()、jqXHR.fail()、およびjqXHR.always()を使用します。

コールバック操作関数を使用している場合(たとえば、メソッドチェーンを使用している場合)、、、.done()および.fail().always()代わりにsuccess()error()を使用しcomplete()ます。

于 2012-06-07T12:35:00.503 に答える
14

@Michael Laffargueの投稿に何か追加したい:

jqXHR.done()より速いです!

jqXHR.success()コールバックにロード時間があり、スクリプトが過剰になる場合があります。私はそれを前に困難な道のりで見つけました。

アップデート:

を使用jqXHR.done()するjqXHR.fail()jqXHR.always()、ajaxリクエストでより適切に操作できます。一般に、ある変数またはオブジェクトでajaxを定義し、その変数またはオブジェクトをコードの任意の部分で使用して、データをより高速に取得できます。良い手本:

/* Initialize some your AJAX function */
function call_ajax(attr){
    var settings=$.extend({
        call            : 'users',
        option          : 'list'
    }, attr );

    return $.ajax({
        type: "POST",
        url: "//exapmple.com//ajax.php",
        data: settings,
        cache : false
    });
}

/* .... Somewhere in your code ..... */

call_ajax({
    /* ... */
    id : 10,
    option : 'edit_user'
    change : {
          name : 'John Doe'
    }
    /* ... */
}).done(function(data){

    /* DO SOMETHING AWESOME */

});
于 2016-12-21T09:16:12.013 に答える
12

簡単に言えば

$.ajax("info.txt").done(function(data) {
  alert(data);
}).fail(function(data){
  alert("Try again champ!");
});

info.textを取得すると、アラートが表示され、追加した関数があれば、サーバーからinfo.textを取得できない場合は、アラートまたはエラー関数が表示されます。

于 2017-03-17T21:20:28.190 に答える
1

古い既存のアプリケーションでJQueryを1.xから2xまたは3.xに移行する場合、JQueryのアップグラデーションがこれらのメソッドで非推奨になるため、success、errorの代わりに.done、.failを使用します。たとえば、サーバーのWebメソッドを呼び出すと、サーバーは呼び出し元のメソッド(Ajaxメソッド)にpromiseオブジェクトを返し、このpromiseオブジェクトには.done、.fail..etcメソッドが含まれます。したがって、成功と失敗の応答についても同じです。以下は例です(これは、GETのようなリクエストタイプに対して作成できるのと同じ方法でPOSTリクエスト用です...)

 $.ajax({
            type: "POST",
            url: url,
            data: '{"name" :"sheo"}',
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false
            }).done(function (Response) {
                  //do something when get response            })
           .fail(function (Response) {
                    //do something when any error occurs.
                });
于 2019-12-04T06:17:07.323 に答える