虽然fins老大不再维护Ecside,但是俺一直在用着它呀,所以只好自己动手丰衣足食了。Ecside一个不爽的地方是依赖prototype.js,而且(好像)只用到了它的ajax。俺们的项目中底层js框架用的是jquery,而且即便不用jquery,仅仅为了一个ajax而引进50k的prototype.js也是非常不值得的。所以自己修改了一下ecside.js文件:
//找到Me.ajaxSubmit = function(resfunc, asy, parameter) 函数,注释掉
//Form.request方法的调用,改为:
jQuery.ajax({
type: 'POST',
url: Me.ECForm.action,
data: jQuery(Me.ECForm).serialize(),
beforeSend: ECSideUtil.setRequestHeaders,
async: asy,
complete: resfunc
});
//找到ECSideUtil.doAjaxUpdate = function(url, pars, callBack, formid)函数,注释掉
//var myAjax = new Ajax.Request(url, {...,改为:
jQuery.ajax({
type: 'POST',
url: url,
data: pars,
beforeSend: ECSideUtil.setRequestHeaders,
async: true,
complete: callBack
});
//为EcSideUtil添加一个函数(从prototype中摘出来的):
ECSideUtil.setRequestHeaders = function(xhr, extras) {
var headers = {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
};
if (this.method == 'post') {
headers['Content-type'] = this.options.contentType +
(this.options.encoding ? '; charset=' + this.options.encoding : '');
/* Force "Connection: close" for older Mozilla browsers to work
* around a bug where XMLHttpRequest sends an incorrect
* Content-length header. See Mozilla Bugzilla #246651.
*/
if (this.transport.overrideMimeType &&
(navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
headers['Connection'] = 'close';
}
for (var i = 0, length = ECSideConstants.AJAX_HEADER.length; i < length; i += 2)
headers[ECSideConstants.AJAX_HEADER[i]] = ECSideConstants.AJAX_HEADER[i+1];
};
OK,搞定。如果不想用jquery,可以使用任何js框架,比如用ExtJS,也可以自己写一个Ajax提交的方法。最后的那个setRequestHeaders可以不要的,有很多方法设置header...
BTW:怎么觉得这个文章俺好像写过一次了,汗...
======================================================
又改了一下,吧“提交...”挪到中间了,同时为排序加了“提交”