先描述下载项目中遇到的问题,在使用jquery form异步上传文件的时候,即使在struts返回视图配置文件中写上type="json",页面中接收到的内容也不会是真正的json字符串,我遇到的是在json串外侧还包了一层html标签<pre/>以至于js回调函数不能正确的解析struts端返回的json数据。
经过各种搜,有前辈也遇到过类似的情况,就此记录下来,以便自己今后查找。
注意以下代码中的红色部分,是关键。
在struts返回视图配置中加入<param name="contentType">text/html</param>即可,还有在异步上传js脚本时dataType: 'json'一定不能省略。
jsp页面首先引入:
<script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
js如下:
function addDevApp(){
if(checkForm()){
$("#addDevAppForm").attr("action",basePath+"/devAppAction!addDevApp")
function fn1(){
$.blockUI({
message: '<img src="../images/loading.gif" align="absmiddle" style="margin-right:20px">'+'<span id="load_span">正提交至云编译平台,可能需要几分钟,请稍后…</span>',
css: { width: '275px' }
});
}
function fn2(data){
$.unblockUI();
var msg = data.errMsg;
console.info(data);
if(msg == null){
alert("应用已提交至云编译平台!","提交云编译",function(){
window.location.href=basePath+"devAppAction!fetchDevAppListWithPage";
});
}else{
alert(msg);
}
}
var options = {
dataType: 'json',
beforeSubmit: fn1,
success: fn2
};
$("#addDevAppForm").ajaxSubmit(options);
}
}
在struts端xml中配置返回视图如下:
<result name="addDevAppSuccess" type="json">
<param name="contentType">text/html</param>
<param name="includeProperties">
errMsg
</param>
</result>