当前位置: 代码迷 >> JavaScript >> 后台返回json数据,提示上载保存
  详细解决方案

后台返回json数据,提示上载保存

热度:282   发布时间:2012-11-22 00:16:41.0
后台返回json数据,提示下载保存
这个问题有点烦,问题解决了,但道理没有弄明白转载一个最有帮助的文章吧http://guofengcn.iteye.com/blog/655370
用struts2+ext开发上传模块,上传文件成功,但总是在浏览器中有提示“下载”……

    而且发现前台的success和failure都没有执行到,打印json串一切正常……

   

    这就奇怪了~~~上网找原因……发现好多人遇到这种问题,按网上的说法一步一步的试,首先是在struts配置文件中加入:

Xml代码
1.<param name="contentType">text/html</param> 
<param name="contentType">text/html</param>    还是没解决掉……



    换个方式,在action中直接写:

Java代码
1.HttpServletResponse response = ServletActionContext.getResponse();  
2.response.setContentType("text/html;charset=UTF-8"); 
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
   试了下,还是不行……

   还有说把struts配置文件中的:<result type="json">中的json改为XXX的……没有去尝试!



    说正题,解决方式~

    经过无数次的尝试后发现,其实只要将Action中的返回值从SUCCESS改为NONE,并写……

Java代码
1.public String execute() throws IOException{  
2.       *******略******最后加上以下部分,struts配置文件正常,也不用配置text/html  
3.,完全没有下载提示了……(不加入这个可能后续会有问题,暂时没涉及呢,涉及了再说……)  
4.     HttpServletResponse response = ServletActionContext.getResponse();  
5.       String msg = "{success:true}";  
6.       response.getWriter().print(msg);  
7.       return NONE;  
8.} 
public String execute() throws IOException{
       *******略******最后加上以下部分,struts配置文件正常,也不用配置text/html
,完全没有下载提示了……(不加入这个可能后续会有问题,暂时没涉及呢,涉及了再说……)
     HttpServletResponse response = ServletActionContext.getResponse();
       String msg = "{success:true}";
       response.getWriter().print(msg);
       return NONE;
}    到现在为止,下载问题应该不会再出现了……



    谁能有更好的解决方式麻烦告诉我一下……


以下是二楼的回复,也很有帮助
我试了你的第一个方法还解决了:firfox不再弹出下载对话框,序列化的action照样能接受,Ext form提交后的回调函数正常执行,谢了,呵呵
不知道你为什么没成功,我把重要代码,提出来,你自己对照看看,说不定能有所收获:
1.save action方法:

Java代码
1.public String save(){   
2.       String oldImageName = request.getParameter("oldImageName"); //是否上传过,如果存在则删除     
3.       if (!"noImage".equalsIgnoreCase(oldImageName)) {       
4.           File oldFile = new File(ServletActionContext     
5.               .getServletContext().getRealPath("/")     
6.               + "UploadImages" + File.separator+oldImageName);     
7.           oldFile.delete();  
8.       }     
9.       System.out.println(oldImageName); //为用户新上传的图片新取一个名字       
10.       try {  
11.        user.setImage(writeFile("userPhoto"));  
12.        userService.addUser(user);  
13.    } catch (Exception e) {  
14.        e.printStackTrace();  
15.        message = e.getMessage();  
16.        success = false;  
17.        return NONE;  
18.    }  
19.       return NONE;  
20.   } 
public String save(){
        String oldImageName = request.getParameter("oldImageName"); //是否上传过,如果存在则删除  
        if (!"noImage".equalsIgnoreCase(oldImageName)) {    
            File oldFile = new File(ServletActionContext  
                .getServletContext().getRealPath("/")  
                + "UploadImages" + File.separator+oldImageName);  
            oldFile.delete();
        }  
        System.out.println(oldImageName); //为用户新上传的图片新取一个名字    
        try {
user.setImage(writeFile("userPhoto"));
userService.addUser(user);
} catch (Exception e) {
e.printStackTrace();
message = e.getMessage();
success = false;
return NONE;
}
        return NONE;
    }
2.action配置:

Java代码
1.<result type="json" name="none">  
2.                <param name="contentType">text/html;charset=utf-8</param>  
3.                <param name="excludeProperties">  
4.                    user.myQuestionses,user.messages,user.myNotes,user.taskPapers,  
5.                    user.tasks,user.testPapers,user.articles  
6.                </param>  
7.            </result> 
<result type="json" name="none">
<param name="contentType">text/html;charset=utf-8</param>
<param name="excludeProperties">
    user.myQuestionses,user.messages,user.myNotes,user.taskPapers,
    user.tasks,user.testPapers,user.articles
  </param>
</result>
3.Ext form提交

Java代码
1.register:function(btn){  
2.        this.form.getForm().submit({  
3.           waitMsg: '正在加载,请稍等……',  
4.           waitTitle: '提示',  
5.           url:'json2/FileUpload_save_Json',  
6.           method: 'POST',  
7.           scope:this,  
8.           success: function(form,action){  
9.               this.setUser(action.result.user.image);  
10.           },  
11.           failure: function(form, action) {  
12.               Ext.Msg.alert('提示', '系统出错,可能您的填写有错,请稍后再尝试上传!');  
13.           }  
14.       });  
15.    }, 
register:function(btn){
    this.form.getForm().submit({
       waitMsg: '正在加载,请稍等……',
       waitTitle: '提示',
       url:'json2/FileUpload_save_Json',
       method: 'POST',
           scope:this,
       success: function(form,action){
           this.setUser(action.result.user.image);
       },
       failure: function(form, action) {
           Ext.Msg.alert('提示', '系统出错,可能您的填写有错,请稍后再尝试上传!');
       }
   });
    },


你在return的时候都是返回的NONE,所以当然没有问题,我是想正常返回success,你试试把return设置成success,看会不会继续出下载的情况
1 楼 wkq_361138880 2010-05-21   引用
我试了你的第一个方法还解决了:firfox不再弹出下载对话框,序列化的action照样能接受,Ext form提交后的回调函数正常执行,谢了,呵呵
不知道你为什么没成功,我把重要代码,提出来,你自己对照看看,说不定能有所收获:
1.save action方法:

Java代码
1.public String save(){   
2.       String oldImageName = request.getParameter("oldImageName"); //是否上传过,如果存在则删除     
3.       if (!"noImage".equalsIgnoreCase(oldImageName)) {       
4.           File oldFile = new File(ServletActionContext     
5.               .getServletContext().getRealPath("/")     
6.               + "UploadImages" + File.separator+oldImageName);     
7.           oldFile.delete();  
8.       }     
9.       System.out.println(oldImageName); //为用户新上传的图片新取一个名字       
10.       try {  
11.        user.setImage(writeFile("userPhoto"));  
12.        userService.addUser(user);  
13.    } catch (Exception e) {  
14.        e.printStackTrace();  
15.        message = e.getMessage();  
16.        success = false;  
17.        return NONE;  
18.    }  
19.       return NONE;  
20.   } 
public String save(){
        String oldImageName = request.getParameter("oldImageName"); //是否上传过,如果存在则删除  
        if (!"noImage".equalsIgnoreCase(oldImageName)) {    
            File oldFile = new File(ServletActionContext  
                .getServletContext().getRealPath("/")  
                + "UploadImages" + File.separator+oldImageName);  
            oldFile.delete();
        }  
        System.out.println(oldImageName); //为用户新上传的图片新取一个名字    
        try {
user.setImage(writeFile("userPhoto"));
userService.addUser(user);
} catch (Exception e) {
e.printStackTrace();
message = e.getMessage();
success = false;
return NONE;
}
        return NONE;
    }
2.action配置:

Java代码
1.<result type="json" name="none">  
2.                <param name="contentType">text/html;charset=utf-8</param>  
3.                <param name="excludeProperties">  
4.                    user.myQuestionses,user.messages,user.myNotes,user.taskPapers,  
5.                    user.tasks,user.testPapers,user.articles  
6.                </param>  
7.            </result> 
<result type="json" name="none">
<param name="contentType">text/html;charset=utf-8</param>
<param name="excludeProperties">
    user.myQuestionses,user.messages,user.myNotes,user.taskPapers,
    user.tasks,user.testPapers,user.articles
  </param>
</result>
3.Ext form提交

Java代码
1.register:function(btn){  
2.        this.form.getForm().submit({  
3.           waitMsg: '正在加载,请稍等……',  
4.           waitTitle: '提示',  
5.           url:'json2/FileUpload_save_Json',  
6.           method: 'POST',  
7.           scope:this,  
8.           success: function(form,action){  
9.               this.setUser(action.result.user.image);  
10.           },  
11.           failure: function(form, action) {  
12.               Ext.Msg.alert('提示', '系统出错,可能您的填写有错,请稍后再尝试上传!');  
13.           }  
14.       });  
15.    }, 





自己的实验<param name="contentType">text/html</param> 是好用的
  相关解决方案