小夜埙的gravatar头像
小夜埙 2017-06-22 11:30:38

为什么js通过ajax前端修改头像不能立刻生效?

项目中有一个上传头像的功能,每次上传成功后,,数据库里的路径已经更新到了,但是刷新后就变成之前的头像,必需重新登录系统,才能显示修改后的头像。现在要改成,修改后就立刻生效。

<div class="photo2"><img class="avatarPic" src="${request.contextPath}$!user.photoImg"></div>

<a href="${request.contextPath}/front/user/profile" class="photo"><img class="userImg" src="${request.contextPath}$!user.photoImg"></a>

var photoImg;
    $("#upload").on("change",function(){
        var formData = new FormData();
        formData.append('file', $('#upload')[0].files[0]);
            $.ajax({
                url:'${request.contextPath}/base/file/upload',
                type:'post',
                processData : false,
                contentType : false,
                data:formData,
                success :function(data){
                      photoImg = data.filePath;
                    $("img[class='avatarPic']").attr('src','${request.contextPath}'+photoImg);
                    //更新用户表头像链接字段
                    updatePic(photoImg);
                }
            });
        });
        function updatePic(photoImg){
        $.ajax({
            url:'${request.contextPath}/front/user/updatePhotoImg',
            type:'post',
            data:{userId:$("#id").val(),photoImg:photoImg},
            success :function(data){
                 layer.alert("操作成功,重新登录后生效");
                 $("img[class='userImg']").attr('src','${request.contextPath}'+photoImg);
            }
        });
    }

后台的代码是这样的:

    @RequestMapping(value="profile")
    public String profile(){
        return "www/user/profile";
    }
   

所有回答列表(10)
最代码官方的gravatar头像
最代码官方  LV167 2017年6月22日

1.ajax返回的地址确认是最新的?

2.ajax返回的地址增加随机数保证不走浏览器缓存试试

评论(3) 最佳答案
ll969285444的gravatar头像
ll969285444  LV4 2017年6月22日

你可以不用ajax,如果不影响程序效果的话。

hrose12的gravatar头像
hrose12  LV21 2017年6月23日

头像信息是不是放在session中更新头像的时候没有更新session

kisn888的gravatar头像
kisn888  LV14 2017年6月23日

这程序有点别扭啊,不建议请求2次ajax,完全可以在上传action的时候,调用修改头像的service

slamdunk的gravatar头像
slamdunk  LV12 2017年6月26日

我建议你打出log来看看,看看每一步返回什么值,确认问题出在哪里

小夜埙的gravatar头像
小夜埙  LV5 2017年6月26日

 $("img[class='avatarPic']").attr('src','${request.contextPath}'+photoImg);

上传后,获取到了路径,数据库里也保存的是最新的,这句代码也更新到了,页面上也显示了最新的图片,可是刷新后就变回原来的图片了,路径也变回原来的了,只有重新登录才生效。

沙漠鱼的gravatar头像
沙漠鱼  LV12 2017年6月26日

试试先设置为空 ,然后在设置正确的地址?

lonesafe的gravatar头像
lonesafe  LV11 2017年6月26日

两种可能

1、后台返回到前台的头像地址是不是从session或者cookie里面获取的?如果是从session或者cookie获取的可能是上传新的头像后只是塞到数据库里面了没有将新的头像地址放到session或者cookie里面。

2、浏览器缓存问题

casoo003的gravatar头像
casoo003  LV3 2017年6月27日

ajax异步调用无先后顺序,不建议一个操作用2个异步来实现,或者ajax给同步属性!

盒子里的鲸的gravatar头像
盒子里的鲸 2017年7月2日

是因为第二次查询走缓存的原因吗?可以试试令牌机制强制走查询

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友