node "Can't set headers after they are sent"
[javascript]
$.post("/index?c=signUp",{v :
{
"username":$($inputValue[0]).val(),
"nick_name":$($inputValue[1]).val(),
"email":$($inputValue[2]).val(),
"password":$($inputValue[3]).val(),
"repassword":$($inputValue[4]).val()
}
},
function(data){
if(data.code == 0){
window.location.href="/index?c=emailPage&email=" + data.data.email;
} else if(data.code == -1) {
$($(".errorMsg").eq(4)).show();
} else if(data.code == -2){
$($(".errorMsg").eq(8)).show();
}
if(data.code == -3){
$($(".errorMsg").eq(1)).show();
}
},'json');
代码1-1
我在post到一个action以后,action返回如下数据给我:
[javascript] view plaincopyprint?
res.send({"code":0, "msg":“login success”, "data":dataJson});
代码1-2
由于我们在代码1-1中12行没有return语句,因此post还未执行完整还需要继续执行,而我们已经跳转到新的url!
上面的解决办法是在跳转后也就是在代码1-1的12行下面(也就是redirt的时候加一个return)添加return;
[javascript]
$.post("/index?c=signUp",{v :
{
"username":$($inputValue[0]).val(),
"nick_name":$($inputValue[1]).val(),
"email":$($inputValue[2]).val(),
"password":$($inputValue[3]).val(),
"repassword":$($inputValue[4]).val()
}
},
function(data){
if(data.code == 0){
window.location.href="/index?c=emailPage&email=" + data.data.email;
return;
} else if(data.code == -1) {
$($(".errorMsg").eq(4)).show();
} else if(data.code == -2){
$($(".errorMsg").eq(8)).show();
}
if(data.code == -3){
$($(".errorMsg").eq(1)).show();
}
},'json');
注意这个问题不仅仅是在后台的js出错,前端的js也可能出现该问题!
典型错误实例:
return的作用不是为了返回数据,而是为了中断函数的执行,如下代码1-3:
[javascript]
if (err) {
res...
} else {
res...
}
代码1-3可能出现node "Can't set headers after they are sent"该问题
但是修改如下代码1-4就没有任何问题:
[javascript] view plaincopyprint?
if (err) return res...
res...
作者:danhuang2012
补充:web前端 , JavaScript ,