当前位置:编程学习 > JAVA >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,