解决ie上传文件后,返回参数乱码问题;返回json提示下载问题;返回数据跳转到error方法块问题;

  1. 问题原因:
    ie上传文件后,需要将文件名返回前台进行展示,但如果是中文则会直接乱码; 在本地运行代码无乱码,但将项目放到测试环境下运行出现乱码问题,故需解决;
  2. 解决思路:
  • 查看前台file传给后台时是否乱码;
  • 查看后台返回给前台时,后台是否乱码;
  • 查看前台接受返回值时,前台是否是乱码;
  1. 该篇讲述的是最后一种,解决方案:
    后台代码
import org.springframework.http.MediaType;
@RequestMapping(value="/upload",produces = MediaType.TEXT_PLAIN_VALUE)
	@ResponseBody
	public String upload(@RequestParam(value = "file", required = false) MultipartFile file) {
		return "你好-我是学习好的小薛";
	}

最主要的是:produces = MediaType.TEXT_PLAIN_VALUE
这个也可以解决返回json提示下载问题;返回值必须是String

  *前台代码:* ie上传时,我用的是 $.ajaxFileUpload;
  $.ajaxFileUpload({ //Jquery插件上传文件
                    url: url,
                    secureuri: false, //是否启用安全提交 默认为false
                    fileElementId: "btn_file", //type="file"的id
                    data: data,
                    dataType: "json", //返回值类型
                    success: function (res) {}  
  });

在插件的js当中找到以下代码,并将我的代码进行复制:

uploadHttpData: function( r, type ) {
        var data = !type;
        data = type == "xml" || data ? r.responseXML : r.responseText;
        // If the type is "script", eval it in global context
        if ( type == "script" )
            jQuery.globalEval( data );
        // Get the JavaScript object, if JSON is used.
        if ( type == "json" ){
        	// ----新增代码
        	 data = r.responseText;  
             var start = data.indexOf(">");  
             if(start != -1) {  
               var end = data.indexOf("<", start + 1);  
               if(end != -1) {  
                 data = data.substring(start + 1, end);  
                }  
             }  
             // ----新增代码
            eval('data = " "+data+" " ');
        }
        // evaluate scripts within html
        if ( type == "html" )
            jQuery("<div>").html(data).evalScripts();
 
        return data;
    }

目的:因为ie会将后台返回的值当做错误进行处理,而且返回的值还被包裹了<pre></pre>,所以我们要把这个标签给去掉,这样就会进入到success当中了;
以上代码也可以解决 返回数据跳转到error方法块问题;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值