ajaxfileupload.js的使用

来源:互联网 发布:进销存 java 编辑:程序博客网 时间:2024/05/16 17:30

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的注解了

以后再遇到其他问题再说

0 0
原创粉丝点击