0

これをjQueryでコーディングしました。ただし、コールバックは希望する順序で呼び出されません (done ブランチのコールバックは when ブランチのコールバックより前に呼び出されます)。internalOrderRequestandrejectionReasonRequestを単純な変数として (関数の代わりに) 定義すると、すべて正常に動作します。誰でもアドバイスできますか?

                        var self = this;
                    debugger;
                    var internalOrderRequest = function() {
                        $
                                .ajax({
                                    type : "GET",
                                    url : internalOrderServiceURL,
                                    contentType : "application/json; charset=utf-8",
                                    dataType : "json",
                                    success : self.retrieveInternalOrderSuccess,
                                    error : self.retrieveInternalOrderError
                                })
                    };

                    var rejectionReasonRequest = function() {


                        $
                                .ajax({
                                    type : "GET",
                                    url : rejectionReasonServiceURL,
                                    contentType : "application/json; charset=utf-8",
                                    dataType : "json",
                                    success : self.retrieveRejectionReasonSuccess,
                                    error : self.retrieveRejectionReasonError
                                })
                    }



                        $
                                .when(internalOrderRequest(),
                                        rejectionReasonRequest())
                                .done(
                                        function(result1, result2) {
                                            $
                                                    .ajax({
                                                        type : "GET",
                                                        url : salesOrderInfoServiceURL,
                                                        contentType : "application/json; charset=utf-8",
                                                        dataType : "json",
                                                        success : function(
                                                                oResult) {
                                                            self
                                                                    .retrieveServiceItemSuccess(oResult);
                                                        },
                                                        error : function(
                                                                oResult) {
                                                            self
                                                                    .retrieveServiceItemError(oResult);
                                                        },
                                                    })
                                        });
4

1 に答える 1

1

jQuery.when()のドキュメントによると、 when() は遅延オブジェクトを期待していますが、 internalOrderRequest() および rejectReasonRequest() メソッドで何も返しません。jQuery.ajax()ドキュメントから:

jQuery 1.5 の時点で $.ajax() によって返される jqXHR オブジェクトは、Promise インターフェイスを実装し、Promise のすべてのプロパティ、メソッド、および動作を提供します (詳細については、Deferred オブジェクトを参照してください)。

メソッドで ajax リクエストを返すだけで、これは機能するはずです。

于 2013-04-11T09:21:10.893 に答える