等待多个Ajax Webmethod,做一个重定向

时间:2016-08-26 11:13:21

标签: jquery asp.net ajax webmethod

我要在我的购物车中插入一些项目,我用Ajax调用N次WebMethod。当我完成插入它们时,我需要重定向到摘要页面。

function SellAll(){
 $.each(x,function (index, value) {

           $.ajax({
               type: "POST",
               url: "find.aspx/AddItem",
               data: "{'id': '" + value + "'}",
               contentType: "application/json; charset=utf-8",
               dataType: "json",
               async: "false",
               success: function (response) {
                  ...
               }
           });
    }) 
document.location.href = "summary.aspx";
};

如果我调用函数SellAll,则夏季页面为空,但是如果我删除重定向并执行该功能并在摘要页面中进行(手动),则会找到包含项目的购物车。 / p>

如何解决此错误?

谢谢!

1 个答案:

答案 0 :(得分:-1)

从当前位置移动document.location.href = "summary.aspx";,它可能类似于:

   $.when(SellAll()).done(function(a1, a2, a3, a4){
// the code here will be executed when all four ajax requests resolve.
// a1, a2, a3 and a4 are lists of length 3 containing the response text,
// status, and jqXHR object for each of the four ajax calls respectively.
 document.location.href = "summary.aspx";
});

不知道这是如何工作的,因为你多次调用SellAll()本身(我有一种感觉,jQuery可能想要每次完成时都触发。

如果那是你的问题,你可以做的是设置一些逻辑来为每个请求创建变量并将它们传递给你的$.when()函数。

例如:

var d1 = $.Deferred();
var d2 = $.Deferred();
var d3 = $.Deferred();

$.when( d1, d2, d3 ).done(function ( v1, v2, v3 ) {
    console.log( v1 ); // v1 is undefined
    console.log( v2 ); // v2 is "abc"
    console.log( v3 ); // v3 is an array [ 1, 2, 3, 4, 5 ]
 });

 d1.resolve();
 d2.resolve( "abc" );
 d3.resolve( 1, 2, 3, 4, 5 );`

d1 d2d3将是您正在排队的ajax请求。