前段时间用到jquery上传插件uploadify时,始终出现系统报出 http error 302 的错误。
网上大量搜集信息,基本上都是说session值丢失的问题,根据网友提供的解决方案进行修改,问题并没有解决。
因此,不排除这是解决302错误的解决方法之一,但是我接下来提出另一解决方案,考虑到异步传输的问题,供大家参考(反正我是成功了)。
首先是uploadify初始化:
$(function() {
$('#projectfile').uploadify({
'swf' : '${ctxStatic}/scripts/jqext/uploadify/uploadify.swf',
'uploader' : '${ctx}/utmmanager/utm/insert',
//session的方案,就是在此uploader的值中添加:JSESSIONID=${pageContext.session.id},
'auto' : true, 并且增加一行'formData' :{'JSESSIONID':"${pageContext.session.id}"},
'buttonText' : '导入',
'multi' : false,
'fileObjName' : 'file',
'method' :'post',
'onUploadSuccess' : function(file,data,response) {
var json_data=eval("("+data+")");
alert("<br>成功导入条目数:"+json_data.successLen+"<br>失败导入条目数: //此处需要返回的是json数据,
"+json_data.errorLen+"<br>导入失败条目:<br>"+json_data.errorData); 不是跳转路径。具体看下面分析。
},
'onUploadError' : function() {
alert("失败");
}
});
});
其次是Controller方法:
需要添加@ResponseBody
@responsebody表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用。
在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,
而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,
写入到Response对象的body数据区。
时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
Chocoo
2016.4.18
------------------------------------------------------------------------------------------------------------------------------------------------