0

promises を使用して ajax リクエストを同期しようとしています: 現在のコードは次のように単純です:

    var ajax = undefined;

    $.ajax({
                type: 'put',
                url: url,
                data: data,
                cache: false,
                successs: function () {

                },
                error: function () {

                }

            }).done(function () {
                alert('done');
            });

これは、ajax 呼び出しが成功している限り (ステータスコード 200) 正常に機能しますが、呼び出しが失敗した場合 (たとえば、無効な URL を trhow で呼び出した場合)、done は呼び出されなくなります。ajaxリクエストが失敗した場合でも、どうすれば実行できますか=

ステファン

4

3 に答える 3

5

あなたのためのいくつかのオプション:

成功時または失敗時に同じ関数を呼び出します。関数は匿名でインラインで定義する必要はありません。名前を付けて個別に定義し、それに応じて参照できます

あなたのスニペットでは、古いもの(最後にsuccess余分なものがあります)新しいものの両方を使用しています。つまり、成功のための 2 つの異なるコールバック (と)を定義しています。1つだけで十分です。serror donesuccessdone

successand を使用し、 on ハンドラにerror渡す例を次に示します。nullerror

var ajax = undefined;

$.ajax({
    type:    'put',
    url:     url,
    data:    data,
    cache:   false,
    success: handler,
    error:   function() {
        handler(null);
    }
});

function handler() {
    alert("Done");
}

またはとを使用doneしてfail

var ajax = undefined;

$.ajax({
    type:    'put',
    url:     url,
    data:    data,
    cache:   false
}).done(handler).fail(function() {
    handler(null);
});

function handler() {
    alert("Done");
}

代わりに (または組み合わせて)、completeコールバック (オプションで指定したもの) とalwaysコールバック ( doneandfailスタイル) があり、成功または失敗に関係なく呼び出されます (成功または失敗のコールバックが行われた後):

complete:

var ajax = undefined;

$.ajax({
    type:    'put',
    url:     url,
    data:    data,
    cache:   false,
    success: handler,
    error:   function() {
        handler(null);
    },
    complete: function() {
        alert("Always called (after success/error)");
    }
});

function handler() {
    alert("Done");
}

always:

var ajax = undefined;

$.ajax({
    type:    'put',
    url:     url,
    data:    data,
    cache:   false
}).done(handler).fail(function() {
    handler(null);
}).always(function() {
    alert("Always called (after done/fail)");
});

function handler() {
    alert("Done");
}
于 2013-02-26T09:13:51.827 に答える
0

done関数の代わりに、次のcomplete設定を使用できます。

$.ajax({
    type: 'put',
    url: url,
    data: data,
    cache: false,
    successs: function () {

    },
    error: function () {

    }
    complete: function(jqXHR, textStatus) {
        alert("Done");

});

complete関数はまたはの後に実行されsuccessますerror。詳細については、 jQueryajaxのドキュメントをご覧ください。

実際のコールバックsuccessとコールバックを気errorにせず、結果に関係なく、呼び出しが完了してから何かを実行したい場合は、設定を完全に省略successしてerrorください。

于 2013-02-26T09:16:23.513 に答える
0

行う必要はありません

 $.ajax({
    type: 'post',
    url: url,
    data: data,
    cache: false,
    success: function () {
       alert('success');
    },
    error: function () {
       alert('error');
    },
    complete: function(){
       alert('complete');
    }
 });
于 2013-02-26T09:17:08.103 に答える