1、问题描述
ext在前端制作的文件上传,struts控制跳转,在后台返回json,前端无法解析后台返回的json信息。具体如下:
(1)构造上传的表单
function upload(){
//initForm();
uploadForm = new Ext.form.FormPanel({
fileUpload:true, //这个必须有,就跟指定jsp的form的enctype类型一样,不然就会出现问题.
//frame: true,
waitMsgTarget: true,
labelAlign: 'right',
baseCls: 'x-plain',
labelWidth: 145,
defaultType: 'textfield',
items: [{
fieldLabel:'请选择导入excel文件',
id:'excelFile',
name:'excelFile',
//xtype: 'fileuploadfield',
//xtype:'textfield',
readOnly : false,
validator : isExcel,
width : 300,
allowBlank : false,
inputType: 'file'//文件类型
}]
});
uploadWindow(uploadForm, '导入微公益信息');
}
(2)处理后,向后台提交
//这里是选择文件,并且过滤掉其他文件类型.只能是Excel
function uploadWindow(formPanel, title){
//一次只能添加或者修改一条记录.
if(formWindow!=null){
formWindow.destroy();
}
formWindow = new Ext.Window({
title: title,
width: 500,
height: 115,
minWidth: 200,
minHeight: 200,
layout: 'fit',
plain:true,
bodyStyle:'padding:5px;',
buttonAlign:'center',
items: formPanel,
buttons: [{
text: '导入',
handler: function()
{
//var excelFile = Ext.get('excelFile').dom.value;
if (formPanel.form.isValid())
{
alert("成功进入");
formPanel.form.doAction('submit',{
url:base.host+'/microWelfareMng!importExcel.do',
method:'POST',
waitMsg: '正在导入...',
success:function(form,action)
{ // post执行成功,即有返回值
alert("导入成功");
var data = Ext.util.JSON.decode(action.response.responseText);
if(data.success=="true")
{
if(data.pojoMap.token == "0")
{
}
if(data.pojoMap.token == "1")
{
}
}
},
failure:function(form,action)
{ // post时发生其他异常
var results = Ext.util.JSON.decode(action.response.responseText);
var actResult = results.success;
var actMessage = results.errorMessage;
alert(actMessage);
}
});
}
else
{
Ext.MessageBox.alert('提交失败', '输入的数据有误!请检查对应红色提示框!');
}
}
},
{
text: '取消',
handler: function()
{
formWindow.destroy();
}
}]
});
formWindow.show();
}
2、问题分析
前端设置了fileUpload:true,后台会将整个form当成文件流进行解析,后台出来完后,默认也将返回的json格式,当成文件流处理,造成在前端提示文件下载或保存。
3、问题解决
需要将json当成文本来解析,设定response的内容类型为ContenType=text/html。其中一种方式,在struts2的框架下,可以这样解决:
<action name="microWelfareMng-*" class="actionMicroWelfare" method="{1}">
<result name="json" type="json" >
<param name="contentType">text/html</param>
<param name="ignoreHierarchy">false</param>
</result>
</action>
参考:http://blog.csdn.net/h396071018/article/details/6730437