ajaxFileUpload.js 无刷新上传图片,支持多个参数同时上传,支持 ie6-ie10

ajaxFileUpload 无刷新上传的原理:

在页面动态创建 form 表单和 ifram 贞,设定 form 表单提交的目标为 ifram 贞,
将文件域和要 post 的参数动态写入 form 表单中,然后提交 from 表单。
通过 window.attachEvent 向 ifram 贞的 onload 事件中注册监听事件响应回调函数。

1.html 部分



2.调用部分

  function uploadImg(imgfileId, imgcontainerId) {
    $.ajaxFileUpload({
      fileElementId: imgfileId,
      url: '/UploadImage',
      dataType: 'json',
      data: { id: 'aaa', name: 'bbb' },
      beforeSend: function (XMLHttpRequest) {
        //("loading");
      },
      success: function (data, textStatus) {
        var img = "";
        $("#" + imgcontainerId).append(img);
      },
      error: function (XMLHttpRequest, textStatus, errorThrown) {
        var img = "图片上传失败!";
        $("#" + imgcontainerId).append(img);
        var msg = "服务器出错,错误内容:" + XMLHttpRequest.responseText;
        $.messager.showWin({ msg: msg, title: '错误提示', color: 'red' });
      },
      complete: function (XMLHttpRequest, textStatus) {
        //("loaded");
      }
    });
  }

3.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 的参数均为可选参数
  注:如遇到‘无法访问’的脚本错误提示则需要在响应流中加一段脚块一同输出:
*/
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('