我在jQuery中对此进行了编码。
但是回调并没有按我想要的顺序调用(在分支中的调用之前调用done分支中的回调)。
如果我将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);
},
})
});
答案 0 :(得分:1)
根据 jQuery.when()文档,when()期望延迟对象,但是你没有在internalOrderRequest()和rejectionReasonRequest()方法中返回任何对象。来自 jQuery.ajax()文档:
jQuery 1.5中$ .ajax()返回的jqXHR对象实现了 Promise接口,为它们提供所有属性,方法和 Promise的行为(有关详细信息,请参阅Deferred对象)。
只需在您的方法中返回您的ajax请求即可。