因最近用到ajax文件上传,所以使用了ajaxfileupload.js这个基于JQuery的插件,但下载下来的这个ajaxfileupload.js是基于JQuery1.2.1的,而现在这个版本应该都不用了吧,用的应该都是1.4以上的了,这个js文件又刚好使用了到一个叫handleError的方法,该方法在1.4版本以后就不存在了,所以使用这个插件的时候要把handleError这个方法复制到ajaxfileupload.js文件中handleError这个方法的具体代码为:
handleError: function( s, xml, status, e ) { // If a local callback was specified, fire it if ( s.error ) s.error( xml, status, e ); // Fire the global callback if ( s.global ) jQuery.event.trigger( "ajaxError", [xml, s, e] ); }
个人觉得这个插件还有个不足之处是不能在其创建的表单中添加新参数字段,例如我要传递这个附件的描述,所以本人对这个插件作了一些更改,使其可以添加新参数字段,具体方法是:
1.先说明一下在自已编写的js文件中传递额外参数的方式。在原有传递参数的基础上添加一个名为params的json对象,如:
params: [{name:"price", value:attach_price}, {name:"description", value:attach_description}]
2.把ajaxfileupload.js的createUploadForm方法签名更改为createUploadForm: function(id, fileElementId, data, params),再在更改后的方法内部对params进行迭代
//添加自定义参数 for(var i=0; i<params.length; i++) { jQuery('<input type="hidden" name="' + params[i].name + '" value="' + params[i].value + '" />').appendTo(form); }当然这段代码要添加在创建form标签之后。
好了,这样就可以添加自定义参数了。
当然还有一种方法是在url中传递参数,但这种方法有几个缺点:
1.因为这种方法传递参数采用的是GET方式,所以传递的参数大小有限制,像上面传递的附件描述,如果描述文字量很大超过1024字节而上传的会有丢失。
2.如果传递的参数中含有中文,得在客户而对其进行URL编码,还得在服务器进行相信的解码处理才能得到正确的数据,增加了额外的工作量。