我必须从网页向服务器发送一些请求以注册新用户。 最后,当所有请求都被发送时,我重新加载页面。 问题: 如果我简单地写这个:
$.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;
});
});
});
可怕,不是吗?
在将来,我将不得不添加其他请求。
我该怎么做呢?
非常感谢。
尼科
答案 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的回调地狱也是类似的):