今天公司项目需要用到文件上传,所以就用了ajaxfileupload.js,但是有个需求是既要上传文件又要传递几个参数,所以卡了几个小时,网上查询资料后,随笔小记一下!
ajaxfileupload.js原版的是不支持参数传递的,也就是没有普通的ajax的data属性,所以我们需要更改ajaxfileupload.js的一点源代码。顺便提醒一下,如果Ctrl+s保存不了,要么是快捷键冲突,要么是ajaxfileupload.js中有中文注释,注释的编码不对,删除注释,自己添加即可!
function ajaxFileUpload(DOMId,row){
var param={"exam.class_id":row.class_id,
"exam.subject_id_list":row.subject_id_list,
"exam.subject_name_list":row.subject_name_list};
$.ajaxFileUpload({
url:'importExcel_Exam_n.do?'+param,
type:'post',
secureuri: false,
fileElementId: DOMId,
dataType:'text/plain',
*data:param,*
success: function(data, status){
$('#imageName').html(data);
},
error: function(data, status, e){
$('#imageName').html('上传失败');
}
});
}
data这一个参数根本就不被ajaxfileupload.js支持。
但是可以通过更改ajaxfileupload.js来支持这一参数。具体如下:
打开ajaxfileupload.js源码(网上的版本好像一般都是未压缩的,所以可以直接查看源码),找到这块代码:
createUploadForm: function(id, fileElementId){
var formId = 'jUploadForm' + id;
var fileId = 'jUploadFile' + id;
var form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
//...中间省略
return form;
}
新增星号中间部分代码(两段代码):
createUploadForm: function(id, fileElementId*,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>');
//...中间省略
*if(data){
for(var i in data){
$('<input type="hidden" name="'+i+'" value="'+data[i]+'"/>').appendTo(form);
}
}*
return form;
}
还有一处需要修改,是为了接收data参数,找到这一部分代码:
ajaxFileUpload: function(s) {
// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
s = jQuery.extend({}, jQuery.ajaxSettings, s);
var id = s.fileElementId;
var form = jQuery.createUploadForm(id, s.fileElementId);
新增星号中间部分代码(一段代码):
ajaxFileUpload: function(s) {
// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
s = jQuery.extend({}, jQuery.ajaxSettings, s);
var id = s.fileElementId;
var form = jQuery.createUploadForm(id, s.fileElementId*,s.data*);
修改完保存,再次运行,后台就可以接收到传递过来的json参数了!
原址:原址