发送几个$ .post请求,然后调用成功函数

时间:2014-05-28 08:48:45

标签: jquery synchronization .post

我必须从网页向服务器发送一些请求以注册新用户。 最后,当所有请求都被发送时,我重新加载页面。 问题: 如果我简单地写这个:

$.post("first request");
$.post("second request");
$.post("third request");
document.location.href=document.location.href;

在发送所有请求之前重新加载页面。 我现在做的是:

$.post("$RequestUri.get('UserSetter.setName')",{param:$("#usernamesignup").val()},
            function(data)
            {
                $.post("$RequestUri.get('UserSetter.setCountry')",{param:$("#countrysignup").val()},
                function(data1)
                {                   
                    $.post("$RequestUri.get('UserSetter.addDeliveringCountry')",{param:$("#countrysignup").val()},
                function(data2)
                    {                   
                        document.location.href=document.location.href;
                    });
                });
            });
可怕,不是吗? 在将来,我将不得不添加其他请求。 我该怎么做呢? 非常感谢。

尼科

1 个答案:

答案 0 :(得分:1)

我的意见中没有“干净”的方式。这是异步调用。无论如何,也许不是创建匿名函数,而是给它们命名并包装在某种“请求链”中,如下所示:

function startRequestChain() {
    $.post("$RequestUri.get('UserSetter.setName')",{param:$("#usernamesignup").val()}, function(data){
        firstRequestCallback(data);
    });
}

function firstRequestCallback(data){
    $.post("$RequestUri.get('UserSetter.setCountry')",{param:$("#countrysignup").val()}, function(rdata){
        secondRequestCallback(rdata);
    });
}

function secondRequestCallback(data) {
    $.post("$RequestUri.get('UserSetter.addDeliveringCountry')",{param:$("#countrysignup").val()},function(rdata){
        thirdRequestCallback(rdata)
    });
}

function thirdRequestCallback(data) {
    document.location.href=document.location.href;
}

startRequestChain();

你可以在这里阅读更多关于callback hell的内容(即使它是针对node.js,Ajax的回调地狱也是类似的):

Callback hell in nodejs?

http://callbackhell.com/

Node.js/Async - How to avoid callback hell with async?