ejs渲染后的页面再send数据,页面会被数据覆盖是怎么回事?

最近在做个用户头像系统,设计思路是这样的:
不通过表单,使用ajax上传用户头像,用户上传完毕头像后,由后端返回操作状态,并且以弹窗形式出现在页面上。

但是结果却是后台来的JSON对象数据直接把页面覆盖了。前台ajax接受不到任何值,不走success也不走error

后台nodejs代码:

routeuser.use('/userhome',function(req,res,next){
            if(!req.files){
                dbhandle.userdata(req.signedCookies.username,function(dbuserinfo){
                    res.render('userhome.ejs',{data:dbuserinfo});
                });
            }
            //photochange
            else if(req.files){//这里开始处理前台来的用户头像。
                var photoupname='www/userphoto/'+req.files[0].filename;
                var photonewname='www/userphoto/'+req.signedCookies.username+'.jpg';
                var sqlphotoname=req.signedCookies.username+'.jpg';
                fs.rename(photoupname,photonewname,function(err,data){
                    if(!err){
dbhandle.userimgchange(req.signedCookies.username,sqlphotoname,function(state){
                            //至此都是ok的state内部也有值。
                            res.send(state);
                        })
                    }
                });
            }
        });

后台mysql代码:

var db_userimgchange=function(busername,photopath,callback){
            var datachange=[photopath,busername];
            db.query("update userinfo set userphoto=? where username=?",datachange,function(err,result){
                if(!err){//上传成功
                    state.statenum=1;
                    state.msg="上传成功!请刷新页面!";
                }
                else{//上传失败
                    state.statenum=0;
                    state.msg="上传失败!";
                }
                callback(state);//回调函数
            })
        };

前台ajax代码:

var data1=new FormData($userphotoready[0].files[0]);

                $.ajax({
                    url:'/userhome',
                    dataType:'json',
                    processData: false,
                    cache: false,
                    data:data1,
                    contentType: false,
                    type:'post',
                    success:function(data){
                        console.log(data);
                    },//ajax接收不到任何数据。不走success也不走error
                    error:function(){
                        console.log('err');
                    }

                });

当取得返回值后,页面状态:
图片描述

小弟初涉前端,还望大牛赐教!

阅读 2.6k
1 个回答
res.send(state);

应该是走了这个分支,http的response返回的就是state这个json,你需要node做模本引擎的话都需要res.render来渲染页面,把stata作为参数传入render方法,res.send就是直接给返回数据(json)给client了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题