6

$.ajax() で async: false オプションを使用することについて混乱しています。$.ajax() ドキュメントによると:

jQuery 1.8 以降、jqXHR ($.Deferred) で async: false を使用することは推奨されなくなりました。jqXHR.done() や非推奨の jqXHR.success() などの jqXHR オブジェクトの対応するメソッドの代わりに、成功/エラー/完了のコールバック オプションを使用する必要があります。

jqXHR ($.Deferred) の意味がわかりません。何らかの理由で async:false を使用していませんか、それとも jqXHR ($.Deferred) は特別な使用例ですか?

$.ajax() 呼び出しを非同期で行うのに問題があるのでお願いします。これは jQuery 1.8.2 の場合です。

var ret = {};

$.ajax({
   async:           false,
    method:         'GET',
    contentType:    'application/json',
    dataType:       'jsonp',
    url:            '/couchDBserver',
    error:          myerr,
    success:        function(data) {

        var rows = data.rows;

        //something that takes a long time
        for(var row in rows) {
             ret[rows[row].key] = rows[row].value;
        }

        console.log('tick');
    }
});
console.log('tock');
console.log(JSON.stringify(ret))

私のコンソール出力は次のとおりです。

トック
{}
ティック

私は何か間違ったことをしていますか、それとも何か間違ったことをしていますか?

4

3 に答える 3

11

それが言っていることは、あなたのリクエストがそうであれば、などのメソッドを使用してコールバックメソッドを登録するasync: falseべきではなく、代わりにオプションを使用してコールバックメソッドをajax呼び出しに渡す必要があるということですajax.done()ajax.fail()success/error/complete

正しい

$.ajax({
    async: false,
    success: function(){
    },
    error: function(){
    },
    complete: function(){
    }
})

違う

$.ajax({
    async: false
}).done(function(){
}).fail(function(){
}).always(function(){
})

if async: true //指定なし

正しい

$.ajax({
}).done(function(){
}).fail(function(){
}).always(function(){
})

また

$.ajax({
    async: false,
    success: function(){
    },
    error: function(){
    },
    complete: function(){
    }
})
于 2013-08-16T07:36:24.013 に答える