异步无刷新上传文件而且上传文件能够带上參数

关于异步上传文件而且带上參数,网上有非常多关于这种插件。而我最喜欢用的插件是ajaxfileupload.js。该插件的代码例如以下:

/*
  131108-xxj-ajaxFileUpload.js 无刷新上传图片 jquery 插件。支持 ie6-ie10 
  依赖:jquery-1.6.1.min.js
  主方法:ajaxFileUpload 接受 json 对象參数
  參数说明:
  fileElementId:必选,上传文件域ID
  url:必选,发送请求的URL字符串
  fileFilter:可选,限定上传文件的格式(.jpg,.bmp,.gif,.png)
  fileSize:可选,0 为无限制(IE浏览器不兼容)
  data:可选,将和文件域一同post的參数(json对象)
  其他:$.ajax 的參数均为可选參数
  注:如遇到‘无法訪问’的脚本错误提示则须要在响应流中加一段脚块一同输出:<script ...>document.domain = 'xxx.com';</script>
*/
jQuery.extend({
  //创建 iframe 元素,接受提交及响应
  createUploadIframe: function(id, uri) {
    //create frame
    var frameId = 'jUploadFrame' + id;

    if (window.ActiveXObject) {
      //fix ie9 and ie 10-------------
      if (jQuery.browser.version == "9.0" || jQuery.browser.version == "10.0") {
        var io = document.createElement('iframe');
        io.id = frameId;
        io.name = frameId;
      } else if (jQuery.browser.version == "6.0" || jQuery.browser.version == "7.0" || jQuery.browser.version == "8.0") {
        var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
        if (typeof uri == 'boolean') {
          io.src = 'javascript:false';
        } else if (typeof uri == 'string') {
          io.src = uri;
        }
      }
    } else {
      var io = document.createElement('iframe');
      io.id = frameId;
      io.name = frameId;
    }
    io.style.position = 'absolute';
    io.style.top = '-1000px';
    io.style.left = '-1000px';

    document.body.appendChild(io);

    return io;
  },
  //创建 from 元素。用于提交的表单
  createUploadForm: function(id, fileElementId, postData) {
    //create form<span style="white-space:pre">	</span>
    var formId = 'jUploadForm' + id;
    var fileId = 'jUploadFile' + id;
    var form = $('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
    var oldElement = $('#' + fileElementId);
    var newElement = $(oldElement).clone();

    $(oldElement).attr('id', fileId);
    $(oldElement).before(newElement);
    $(oldElement).appendTo(form);
    //加入自己定义參数
    if (postData) {
      //递归遍历JSON全部键值

      function recurJson(json) {
        for (var i in json) {
          //alert(i+"="+json[i])
          $("<input name='" + i + "' id='" + i + "' value='" + json[i] + "' />").appendTo(form);
          if (typeof json[i] == "object") {
            recurJson(json[i]);
          }
        }
      }

      recurJson(postData);
    }
    //set attributes
    $(form).css('position', 'absolute');
    $(form).css('top', '-1200px');
    $(form).css('left', '-1200px');
    $(form).appendTo('body');
    return form;
  },
  //上传文件
  //s 參数:json对象
  ajaxFileUpload: function(s) {
    s = jQuery.extend({fileFilter:"",fileSize:0}, jQuery.ajaxSettings, s);
    //文件筛选
    var fielName = $('#' + s.fileElementId).val();
    var extention = fielName.substring(fielName.lastIndexOf(".") + 1).toLowerCase();
    if (s.fileFilter && s.fileFilter.indexOf(extention) < 0) {
      alert("仅支持 (" + s.fileFilter + ") 为后缀名的文件!");
      return;
    }
    //文件限制大小
    if (s.fileSize > 0) {
      var fs = 0;
      try {
        if (window.ActiveXObject) {
          //IE浏览器
          var image = new Image();
          image.dynsrc = fielName;
          fs = image.fileSize;
        } else {
          fs = $('#' + s.fileElementId)[0].files[0].size;
        }
      } catch(e) {
      }
      if (fs > s.fileSize) {
        alert("当前文件大小 (" + fs + ") 超过同意的限制值 (" + s.fileSize +")!

");
        return;
      }
    }
    var id = new Date().getTime();
    //创建 form 表单元素
    var form = jQuery.createUploadForm(id, s.fileElementId, s.data);
    //创建 iframe 贞元素
    var io = jQuery.createUploadIframe(id, s.secureuri);
    var frameId = 'jUploadFrame' + id;
    var formId = 'jUploadForm' + id;
    //监測是否有新的请求
    if (s.global && !jQuery.active++) {
      jQuery.event.trigger("ajaxStart"); //触发 AJAX 请求開始时执行函数。

Ajax 事件。

    }
    var requestDone = false;
    //创建请求对象
    var xml = {};
    if (s.global)
      jQuery.event.trigger("ajaxSend", [xml, s]); //触发 AJAX 请求发送前事件
    //上载完毕的回调函数
    var uploadCallback = function(isTimeout) {
      var io = document.getElementById(frameId);
      try {
        //存在跨域脚本訪问问题。如遇到‘无法訪问’提示则须要在响应流中加一段脚块:<script ...>document.domain = 'xxx.com';</script>
        if (io.contentWindow) { //兼容各个浏览器。可取得子窗体的 window 对象
          xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;
          xml.responseXML = io.contentWindow.document.XMLDocument ?

io.contentWindow.document.XMLDocument : io.contentWindow.document;

        } else if (io.contentDocument) { //contentDocument Firefox 支持,> ie8 的ie支持。

可取得子窗体的 document 对象。
          xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null;
          xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document;
        }
      } catch(e) {
        jQuery.handleErrorExt(s, xml, null, e);
      }
      if (xml || isTimeout == "timeout") {
        requestDone = true;
        var status;
        try {
          status = isTimeout != "timeout" ?

"success" : "error";
          // Make sure that the request was successful or notmodified
          if (status != "error") {
            //处理数据(执行XML通过httpData无论回调)
            var data = jQuery.uploadHttpData(xml, s.dataType);
            // If a local callback was specified, fire it and pass it the data
            if (s.success)
              s.success(data, status);

            // Fire the global callback
            if (s.global)
              jQuery.event.trigger("ajaxSuccess", [xml, s]);
          } else
            jQuery.handleErrorExt(s, xml, status);
        } catch(e) {
          status = "error";
          jQuery.handleErrorExt(s, xml, status, e);
        }

        // The request was completed
        if (s.global)
          jQuery.event.trigger("ajaxComplete", [xml, s]);

        // Handle the global AJAX counter
        if (s.global && !--jQuery.active)
          jQuery.event.trigger("ajaxStop");

        // Process result
        if (s.complete)
          s.complete(xml, status);

        jQuery(io).unbind();

        setTimeout(function() {
          try {
            $(io).remove();
            $(form).remove();
          } catch(e) {
            jQuery.handleErrorExt(s, xml, null, e);
          }

        }, 100);

        xml = null;

      }
    };
    //超时检查。s.timeout 毫秒后调用 uploadCallback 回调函数提示请求超时
    if (s.timeout > 0) {
      setTimeout(function() {
        // Check to see if the request is still happening
        if (!requestDone) uploadCallback("timeout");
      }, s.timeout);
    }
    try {
      //设置动态 form 表单的提交參数
      // var io = $('#' + frameId);
      var form = $('#' + formId);
      $(form).attr('action', s.url);
      $(form).attr('method', 'POST');
      $(form).attr('target', frameId);
      if (form.encoding) {
        form.encoding = 'multipart/form-data';
      } else {
        form.enctype = 'multipart/form-data';
      }
      $(form).submit();

    } catch(e) {
      jQuery.handleErrorExt(s, xml, null, e);
    }
    //向动态表单的页面载入事件中注冊回调函数
    if (window.attachEvent) {
      document.getElementById(frameId).attachEvent('onload', uploadCallback);
    } else {
      document.getElementById(frameId).addEventListener('load', uploadCallback, false);
    }
    return {
      abort: function() {
      }
    };

  },
  //上传文件
  uploadHttpData: function(r, type) {
    //alert("type=" + type + ";uploadHttpData" + JSON.stringify(r))
    var data = !type;
    data = type == "xml" || data ?

r.responseXML : r.responseText;
    // If the type is "script", eval it in global context
    if (type == "script")
      jQuery.globalEval(data);
    // Get the JavaScript object, if JSON is used.
    if (type == "json")
      eval("data = " + data);
    // evaluate scripts within html
    if (type == "html")
      jQuery("<div>").html(data).evalScripts();
    //alert($('param', data).each(function(){alert($(this).attr('value'));}));
    return data;
  },
  handleErrorExt: function(s, xhr, status, e) {
    // If a local callback was specified, fire it
    if (s.error) {
      s.error.call(s.context || s, xhr, status, e);
    }

    // Fire the global callback
    if (s.global) {
      (s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]);
    }
  }
});

以上插件须要jquery支持

还须要下面代码

		 		  $.ajaxFileUpload ({
			 			url :url,
			 			secureuri:false,
			 			fileElementId:img,
			 			dataType:'text',
			 			data:{imge:im},
			 			success : function (data, status){
			 				if(data!=""){
			 				  imsrc.attr('src',data);
			 				  hide.val(data);
			 				}
			 			}
			 		});

url 是服务端的地址

fileElementId 是文件域的id 为了上传成功 文件域的name 与id要一致

dateType 是上传文件的信息发送到服务端的格式,text是文本

data 是发送文件能够带上參数,是可选的。

时间: 2024-08-12 03:27:27

异步无刷新上传文件而且上传文件能够带上參数的相关文章

异步无刷新上传文件并且上传文件可以带上参数

关于异步上传文件并且带上参数,网上有很多关于这样的插件,而我最喜欢用的插件是ajaxfileupload.js,该插件的代码如下: /*   131108-xxj-ajaxFileUpload.js 无刷新上传图片 jquery 插件,支持 ie6-ie10    依赖:jquery-1.6.1.min.js   主方法:ajaxFileUpload 接受 json 对象参数   参数说明:   fileElementId:必选,上传文件域ID   url:必选,发送请求的URL字符串   fi

关于 异步无刷新分页的问题

今天做了  异步无刷新分页 ,之前自己的想法是 异步加载每一页的内容,传入pageSize(页面多大显示条数)和pageIndex(页码),然后查询出数据,放在dataset中,在利用json常用类库,把dataset转化为json对象,传回页面,同是把写好的分页代码也传回页面,当实施的时候遇到了困难,c#一般处理程序无法同时传两个参数到页面. 后来发现了一种方法, System.Web.Script.Serialization.JavaScriptSerializer,序列化,引用了--命名空

一段异步无刷新的分页代码

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>js分页</title> <style type="text/css"> div,ul,li,body { margin: 0; padding: 0; f

对自写的Asp.Net分页控件的应用方式(异步无刷新分页)

前台代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> <link href="css/table.css&quo

mvc中file无刷新上传文件

前言 上传文件应该是很常见必不可少的一个操作,网上也有很多提供的上传控件.今天遇到一个问题:input控件file无法进行异步无刷新上传.真真的感到别扭.所以就尝试这去处理了一下. 上传封装类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Web; n

理清fineuploader无刷新上传的一些事

1.fineuploader是一款不依赖与jquery的异步无刷新上传组件,fineuploader采用ajax方式实现对文件上传,返回值都是以json的格式,对后台服务器操作和前端dom对象一些操作代码集中在javascript脚本中,这样集成使fineuploader使用非常简单,使用的时候只需要添加(fineuploader-3.5.0.css)与(jquery.fineuploader-3.9.1.js)即可实现上传. 2.fineuploader也有自身的一些特点:1.支持文件上传进度

有上下界的网络流2-有源汇带上下界网络流ZOJ3229

ZOJ3229题目大意:一个屌丝给m个女神拍照,计划拍照n天,每一天屌丝可以和C个女神拍照,每天拍照数不能超过D张,而且给每个女神i拍照有数量限制[Li,Ri],对于每个女神n天的拍照总和不能少于Gi,如果有解求屌丝最多能拍多少张照,并求每天给对应女神拍多少张照:否则输出-1. 解题思路:        1.增设一源点st,汇点sd,st到第i天连一条上界为Di下界为0的边,每个女神到汇点连一条下界为Gi上界为正无穷的边,对于每一天,当天到第i个女孩连一条[Li,Ri]的边.        2.

shell程序之逐行读取一文件里的參数且使用此參数每次运行5分钟

/********************************************************************* * Author  : Samson * Date    : 04/18/2014 * Test platform: *              Linux ubuntu 3.2.0-58-generic-pae *              GNU bash, version 4.2.39 * *****************************

JQUERY AJAX无刷新异步上传文件

AJAX无刷新上传文件并显示 http://blog.csdn.net/gao3705512/article/details/9330637?utm_source=tuicool jQuery Form Plugin 官网地址:http://malsup.com/jquery/form/#tab7 基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用 http://www.cnblogs.com/wuhuacong/p/3343967.html