SelectPage
SelectPage copied to clipboard
初始值 传递额外数据
对于post 请求 一般会附加 csrftoken 如果后台需要这个值 在初始值ajax请求时 需要客户端传递这个数据
// SelectPage.prototype.setInitRecord
if (typeof p.data === 'object') {
var data = new Array();
var keyarr = key.split(',');
$.each(keyarr,function(index,row){
for (var i = 0; i < p.data.length; i++) {
if (p.data[i][p.keyField] == row) {
data.push(p.data[i]);
break;
}
}
});
if(!p.multiple && data.length > 1) data = [data[0]];
self.afterInit(self, data);
} else {//ajax data source mode to init selected item
$.ajax({
dataType: 'json',
type: 'POST',
url: p.data,
// 这里 需要传递额外数据
data: {
searchTable: p.dbTable,
searchKey: p.keyField,
searchValue: key
},
success: function(json) {
var d = null;
if(p.eAjaxSuccess && $.isFunction(p.eAjaxSuccess)) d = p.eAjaxSuccess(json);
self.afterInit(self, d.list);
},
error: function() {
self.ajaxErrorNotify(self);
}
});
}
在data 处需要暴露接口来传递csrfToken 注意到了 在 SelectPage.prototype.searchForDb 里面 params参数这种形式可以返回额外数据
但在setInitRecord 方法实现中 没有使用 params参数的值 这样想传递额外数据 可能就不方便了
当然 通过一些看起来比较“脏”的补丁方法 也可以实现 只不过不是那么“优雅”:
// 添加额外的 csrf token值
$.ajaxSetup({
beforeSend: function(jqXHR, settings) {
var csrfParam = $('meta[name=csrf-param]').attr('content') ;
var csrfToken = $('meta[name=csrf-token]').attr('content') ;
// this.data += '&' + $.param({
// key: 'value'
// });
this.data += '&'+csrfParam+'='+csrfToken
}
});
目前先用这种方法搞了 不然就要去改源码添加这个口子了
往前翻了下 issues 发现前面有人已经提过了 #84