2013-04-11 2 views
0

Я закодировал это в jQuery. Однако обратные вызовы не вызываются в том порядке, в котором я хочу (обратный вызов в обработанной ветви вызывается до тех, что указаны в ветке when). Если я определяю internalOrderRequest и rejectionReasonRequest как простые переменные (instea od functions), все работает нормально. Не могли бы кто-нибудь посоветовать?

     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); 
                 }, 
                }) 
             }); 

ответ

1

Согласно jQuery.when() документации, когда() ожидает отсроченные объектов, но не возвращать в ваших internalOrderRequest() и rejectionReasonRequest() методы. От jQuery.ajax() документации:

Объекты jqXHR возвращаемых $ .ajax() на JQuery 1.5 реализуют интерфейс Promise, давая им все свойства, методы и поведение Promise (дополнительную информацию см. в разделе Отложенный объект).

Просто верните ваши запросы ajax в своих методах, и это должно сработать.

Смежные вопросы