`
bainian_205
  • 浏览: 46533 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

后台返回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> 是好用的
分享到:
评论

相关推荐

    JSON数据中存在单个转义字符“\”的处理方法

    此外,文件中还提到,如果JSON数据中存在奇数个反斜杠而后台没有进行处理,移动端可以先过滤掉这些特殊字符。这个提示意味着,在某些情况下,我们可以选择简化处理,直接移除所有反斜杠,但这种做法可能会导致原本...

    UEditor图片上传到后台

    3. 返回结果:服务器在成功保存图片后,需要返回一个JSON格式的响应,包含图片的URL或其他访问路径,以便UEditor在前端展示。 三、前端与后端交互 1. formData对象:在JavaScript中,使用FormData对象可以方便地...

    ext/和Ajax结合的说明和例子,获得后台数据,很适合大家

    2. **判断是否有数据需要提交**:如果`json`数组为空,则弹出提示框告知用户没有数据需要保存,并退出函数。 3. **发送Ajax请求**: - 使用`Ext.Ajax.request`发起POST请求。 - 设置请求URL为`./member_manage.jsp...

    Android应用源码之利用JSON,通过Android客户端访问web服务器,实现一个登录功能.rar

    这个源码示例展示了如何在Android客户端实现一个登录功能,通过向服务器发送JSON请求并解析返回的JSON数据来验证用户的身份。下面将详细讲解其中涉及的关键知识点。 1. JSON基础:JSON是一种轻量级的数据交换格式,...

    ajax自动保存草稿 ajax自动保存草稿

    8. **用户体验**:在保存过程中,显示“正在保存”提示,保存成功后显示“已保存”,或提供撤销/恢复功能,提升用户体验。 9. **安全性**:确保数据传输过程的安全性,可以使用HTTPS协议加密通信,防止数据被窃取。...

    ajax自动保存草稿

    在服务器端,例如在Java环境中,可以创建一个处理这些请求的API接口,接收JSON数据并保存到数据库。 在"自动保存草稿"的实现中,还需要考虑以下几个关键点: 1. **错误处理**:确保在网络不稳定或其他异常情况下,...

    请求pc端请求后台接口的工具(im only resting 1.4.0)

    你可以在预期结果区域填写期望的值或规则,工具将自动比对返回结果,若有不符,会给出提示,帮助定位问题。 此外,im only resting 1.4.0还支持保存和管理接口测试集。你可以将常用的接口组合成一个测试集,方便...

    利用java 后台导出Flex DataGrid为Excel

    - 保存Workbook为Excel文件,可以设置为流式响应,直接返回给前端。 3. **Flex与Java通信**: - Flex客户端通过HTTP服务调用Java后台接口,传递DataGrid的数据。 - 使用AMF(Action Message Format)或者...

    Ajax自动保存效果,用于博客论坛等

    在Web开发中,Ajax的应用极大地提升了用户体验,因为它允许后台与服务器进行数据交换,而不会中断用户的界面操作。本示例主要关注的是如何利用Ajax实现一种自动保存功能,常见于博客、论坛等在线文本编辑场景,确保...

    简单的android登录+php后台代码

    4. 客户端处理响应:Android应用解析服务器返回的JSON数据,根据响应内容显示相应的提示,如登录成功则跳转到主界面,否则显示错误信息。 在这个简单的Android登录+PHP后台的项目中,你可以学到如何在Android应用中...

    版本更新,通知显示下载进度

    服务器端可能有一个API接口,返回JSON或其他格式的数据,包含新版本号、更新日志和apk安装包的下载URL。 2. **获取apk下载路径**:如果服务器响应有新版本可用,应用将获取到apk安装包的下载URL。这个URL通常指向一...

    AJAX实现的自动保存实例

    5. 服务器响应:服务器接收到请求后,处理数据并返回一个确认消息或保存的ID。使用`onreadystatechange`事件监听服务器的响应,当`readyState`为4(表示请求已完成)且`status`为200(表示成功)时,说明保存成功。 ...

    java后台+easyui框架实现的所有demo

    通过Ajax请求,后台Java程序处理数据库查询,返回JSON格式的数据,前端则使用这些数据填充Grid。 2. **表单操作**:EasyUI的Form组件可与后台进行数据交换,支持创建、编辑和删除操作。Java后端可能使用了Spring ...

    AdvancedDataGrid多层分组表头导出Excel与后台JAVA交互

    最后,JAVA后台生成Excel文件后,可以选择返回文件流,前端接收到流后直接下载,或者将文件保存到服务器,提供一个URL供用户下载。为了提高用户体验,可以在导出过程中显示进度条或提示信息。 总结来说,实现...

    下拉框输入搜索提示案例.rar,一款很好用的可以连接后台数据库,显示的下拉框

    3. **JSON数据格式**:服务器返回的数据通常以JSON格式传输,便于前端解析和处理。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 4. **数据过滤和...

    基于Ajax的日志自动保存程序

    2. **数据封装**:将需要保存的日志信息(如用户ID、操作时间、操作内容等)封装成JSON格式,便于传输。 3. **Ajax调用**:使用XMLHttpRequest对象发送POST请求到服务器,将日志数据作为请求体发送。 4. **服务器...

    vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)

    此外,如果下载的文件不是文件而是JSON格式的数据,我们需要进行判断并转换。这在请求时可以通过设置`responseType`为`'blob'`来确保接收到的是文件流,然后根据返回的数据判断是否需要转换。 在项目实践中,使用...

    Android-自动下载fir.im上的apk

    3. JSON解析库:如Gson或Jackson,用于解析API返回的JSON数据。 4. Android权限管理:了解如何在AndroidManifest.xml中声明权限,以及在运行时请求权限(对于Android 6.0及以上版本)。 5. Android编程模型:理解...

    ajax C#结合Jquery实现

    `JsonResult`是返回JSON数据的结果类型。 3. **POST请求**: 在jQuery中,POST请求可以使用`$.ajax()`或更简单的`$.post()`函数。例如: ```javascript $.post('your_server_url', { key: 'value' }, function...

    万能后台管理模板javaweb

    11. 接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间 12. 发送邮件:单发,群发邮件 13. 置二维码:生成二维码图表保存到服务器 or 解析读取二维码内信息 14. 图表报表:...

Global site tag (gtag.js) - Google Analytics