0

Jquery 遅延オブジェクトに問題があります。ajax呼び出しを実行し、データをサーバーに保存する関数内にプロミスを作成しています。jQuery ajax が事前定義された遅延オブジェクトを持っていることを知っています。

var AddCodes = function(XML ){
    var def = $.Deferred();

    $.ajax({
        type: "POST",
        url: "webservicename.asmx/SaveCode",
        data: "{" + XML + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function () {
            def.resolve();
        },
        error: function (jqXHR, status, error) {
            def.reject();
        }
    });

   return def.promise();
}

次に、このように関数を評価しています。

$.when(AddCodes(XML)).then(function(){
    processData();
}

AddCodes() 関数が正常に実行された場合にのみ、データベースにデータを挿入するために別の関数を呼び出しています。どちらも従属関数だからです。

問題は、関数が deferred と評価されず、機能しなかった場合object. processData()です。私は自分のプロジェクトに初めて遅延を使用しています。この問題を整理するのを手伝ってください。

4

1 に答える 1

1

ドキュメントには、遅延オブジェクト (で作成されたオブジェクト$.when()プレーン オブジェクトの両方を受け入れると記載されています。これらは、既に約束が果たされていると見なされます。$.Deferred()

単一の引数が jQuery.when に渡され、それが Deferred でない場合、解決された Deferred として扱われ、添付された doneCallbacks はすぐに実行されます。

しかし、AddCodes()何も返しません。遅延オブジェクト ( def) を返す場合、これは機能するはずです。

したがって、コードを次のように変更すると

var AddCodes = function(XML ){
    var def = $.Deferred();

    $.ajax({
        ....
    });

    return def.promise();
}

あなたは大丈夫なはずです。これは最初の例とまったく同じであることに注意してください

于 2012-10-11T09:13:40.730 に答える