总所周知,krajee有个 uploadUrl 属性,如果不配置它的话,“upload”按钮在初始化的时候是submit,但如果给这个属性赋了值,那“upload”按钮就是个<a>标签,href就是uploadUrl的属性值。但是一旦这样做,就没法携带参数上传了。
为了解决这个问题,我查看了源码,发现如果配置了uploadUrl属性的话,点击“upload”按钮,是进行的ajax请求,且一定会走如下这个方法。
_ajaxSubmit: function (fnBefore, fnSuccess, fnComplete, fnError, previewId, index) {
var self = this, settings, vUrl;
if (!self._raise('filepreajax', [previewId, index])) {
return;
}
self._uploadExtra(previewId, index);
self._initAjaxSettings();
self._mergeAjaxCallback('beforeSend', fnBefore);
self._mergeAjaxCallback('success', fnSuccess);
self._mergeAjaxCallback('complete', fnComplete);
self._mergeAjaxCallback('error', fnError);
vUrl = index && self.uploadUrlThumb ? self.uploadUrlThumb : self.uploadUrl;
settings = $.extend(true, {}, {
xhr: function () {
var xhrobj = $.ajaxSettings.xhr();
return self._initXhr(xhrobj, previewId, self.getFileStack().length);
},
url: self._encodeURI(vUrl),
type: 'POST',
dataType: 'json',
data: self.formdata,
cache: false,
processData: false,
contentType: false
}, self._ajaxSettings);
self.ajaxRequests.push($.ajax(settings));
}
可以在源码里搜一下。
我们可以在这里获取页面的参数,一块带到后台去。
我这里自定义了几个参数。
_ajaxSubmit: function (fnBefore, fnSuccess, fnComplete, fnError, previewId, index) {
var self = this, settings, vUrl;
if (!self._raise('filepreajax', [previewId, index])) {
return;
}
self._uploadExtra(previewId, index);
self._initAjaxSettings();
self._mergeAjaxCallback('beforeSend', fnBefore);
self._mergeAjaxCallback('success', fnSuccess);
self._mergeAjaxCallback('complete', fnComplete);
self._mergeAjaxCallback('error', fnError);
vUrl = index && self.uploadUrlThumb ? self.uploadUrlThumb : self.uploadUrl;
//自定义参数
self.formdata.append("extraParam1", $("#extraParam1").val());
self.formdata.append("extraParam2", $("#extraParam2").val());
self.formdata.append("extraParam3", $("#extraParam3").val());
self.formdata.append("extraParam4", $("#extraParam4").val());
self.formdata.append("extraParam5", $("#extraParam5").val());
self.formdata.append("extraParam6", $("#extraParam6").val());
settings = $.extend(true, {}, {
xhr: function () {
var xhrobj = $.ajaxSettings.xhr();
return self._initXhr(xhrobj, previewId, self.getFileStack().length);
},
url: self._encodeURI(vUrl),
type: 'POST',
dataType: 'json',
data: self.formdata,
cache: false,
processData: false,
contentType: false
}, self._ajaxSettings);
self.ajaxRequests.push($.ajax(settings));
}
然后在页面上配置好相应的ID就好了。后台接收的参数名也需要注意。