1.下载ajaxfileupload.js
2.一般的使用
var ajaxfileParas = {
url : path + url ,//用于文件上传的服务器端请求地址
secureuri : false,//一般设置为false
fileElementId : fileid,//文件上传控件的id属性
dataType : 'json',//返回值类型 一般设置为json
data : options.data ,
success : function(data, status) {//服务器成功响应处理函数
if(data.state){
showMsg("提醒","操作成功",true);
}else{
showMsg("提醒","操作失败:" + data.message ,true);
}
},
error : function(data, status, e) { //服务器响应失败处理函数
pro_close();
showMsg("提醒","操作失败:" + e ,true);
},
ajaxComplete: function(){
},
ajaxStart:function(){
}
} ;
$.ajaxFileUpload(ajaxfileParas ) ;
说说遇到的问题:
1.有一个版本不一致的问题,忘了具体什么了,好像在源码加一个if else的判断错误的地方
2.前台使用dataType 'json'
后台使用的response.writer流返回的
对于google,返回的是<pre>json数据<pre/>,用<pre>标签把要返回的json给包起来了,页面就会解析json错误,
修改源码:
uploadHttpData: function( r, type ) {
if( type == "json" )
{
// eval( "data = " + data );
// data = jQuery.parseJSON(jQuery(data).text());
data = eval('('+jQuery(data).text()+')');
}
}
找到源码的uploadHttpData方法,把 eval( "data = " + data ); 换成data = eval('('+jQuery(data).text()+')');
但是在IE下,要加上response.setContentType("text/plain;charset=UTF-8");这一句,
如果这句不加,ie会直接返回json,加上这句,就会和google一样用<pre>包起来了,前台解析就一致了
代码:
response.setContentType("text/plain;charset=UTF-8");
try {
String domain = null ;
// response.getWriter().write("<script>document.domain='"+domain+"';</script>") ;
response.getWriter().write(JSON.toJSONString(responseEntity));
response.getWriter().flush();
}
ps:不加,前台判断是json直接eval,是标签取json也行
3.往后台传自定义数据:data 传不过去
data:{name:'ddd'},后台接不到
原因是data源码里没用,所以修改源码:
1.源码找到下面一句,把s.data当第三个参数传过去
var form = jQuery.createUploadForm(id, s.fileElementId,s.data);
2.找到源码,把createUploadForm定义第三个参数
createUploadForm: function(id, fileElementId,data)
3.在createUploadForm方法里使用data
var formId = 'jUploadForm' + id;
var fileId = 'jUploadFile' + id;
var form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
下面这段代码是新增的,然后后台就可以和springmvc接普通json一样可以映射到了
if (data) {
for (var i in data) {
$('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
}
}
4.其他好像还记得google下可以直接@responsebody,IE下则必须response.write,所以后台直接都response.write,不用springmvc的注解了
以后再遇到其他问题再说