我试图使用jquery when的例子发送几个ajax我有一个问题,因为我无法理解为什么我会生气。通常,当我尝试发送多个ajax时,响应很糟糕。
我这样做:
Workflow.prototype.ajaxWorkflowsPaymentProcessTransitionsAvailable = function (barcodes) {
var workflow = this;
return $.ajax({
url: "api/v1.0/workflows/paymentProcess/transitions/available",
type: "POST",
data: {barcodes: barcodes},
dataType: 'JSON'
});
};
Workflow.prototype.ajaxViewsDocuments = function (fd) {
var workflow = this;
return $.ajax({
url: "api/v1.0/views/documents",
type: "POST",
data: fd,
processData: false,
contentType: false,
dataType: 'JSON'
});
};
$.when(workflow.ajaxViewsDocuments(fd), workflow.ajaxWorkflowsPaymentProcessTransitionsAvailable(barcodes)).done(function(a1, a2){
console.log(a1, a2);
});
并且我在console.log中得到了这个:
但是服务器回复了这个:
如何获得返回服务器的相同响应?
答案 0 :(得分:2)
jQuery ajax返回三个结果。因此,当您使用$.when()
的两个ajax调用时,传递给$.when()
回调的每个参数都会传递两个数组,其中每个数组都有一个用于ajax调用的三个参数。
因此,在您的代码中更改此内容:
console.log(a1, a2);
到此:
console.log(a1[0], a2[0]);
您从jQuery ajax调用中获得的三个典型参数将在a1[0]
,a1[1]
,a2[2]
中传递。返回的数据参数位于每个数组的[0]
元素中。您可以在文档here中查看示例。
您可以围绕$.ajax()
创建自己的包装器,该包装器将获取三个结果值,并将其修剪为一个结果值,然后$.when()
不会将它们放入阵列。
// wrapper function to make return result from $.ajax() be one single argument
$.ajax2 = function() {
return $.ajax.apply($, arguments).then(function(result) {
// return only single result, not all three typical arguments
// so $.when() won't put the args in an array
return result;
});
};
然后,你会像这样使用它(注意从$.ajax()
到$.ajax2()
的变化):
Workflow.prototype.ajaxWorkflowsPaymentProcessTransitionsAvailable = function (barcodes) {
var workflow = this;
return $.ajax2({
url: "api/v1.0/workflows/paymentProcess/transitions/available",
type: "POST",
data: {barcodes: barcodes},
dataType: 'JSON'
});
};
Workflow.prototype.ajaxViewsDocuments = function (fd) {
var workflow = this;
return $.ajax2({
url: "api/v1.0/views/documents",
type: "POST",
data: fd,
processData: false,
contentType: false,
dataType: 'JSON'
});
};
$.when(workflow.ajaxViewsDocuments(fd), workflow.ajaxWorkflowsPaymentProcessTransitionsAvailable(barcodes)).done(function (a1, a2) {
console.log(a1, a2);
});
我在这里用jQuery 1.x,2.x和3.x测试了这个概念:https://jsfiddle.net/jfriend00/2mcLsw3f/