浏览 2723 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-02-25
為什麼我需要這些object的特性呢? 因為我想把整個項目用ajax實現 但問題是令到整個項目產生了很多相似但不完全相同的部份 例如 function formSubmit(e){ var frmObj=Event.element(e); var pars=Form.serialize(frmObj.id); var url = frmObj.action; ajaxObj = new Ajax.Request( url, { method: 'post', postBody: pars, asynchronous: true, onFailure:loginFailure, onSuccess:getResponse } ); Event.stop(e); } 每一頁也充滿了大大小小的這一類的function但,當中的onSuccess, onFailure等的function及parameter會不同,如何可以減少這類重覆的代碼呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-02-25
我们项目都是自己整个写js代码
如果是上面的那个问题,我会再把Prototype的Ajax.Request再封装一下以达到要求。 function formSubmit(e){ var frmObj=Event.element(e); var pars=Form.serialize(frmObj.id); var url = frmObj.action; ajaxObj = new MyAjaxPost(url,pars,getResponse,loginFailure); ); Event.stop(e); } function MyAjaxPost(url, pars, succCallback, failCallback) { return new Ajax.Request( url, { method: 'post', postBody: pars, asynchronous: true, onFailure:failCallback, onSuccess:succCallback } ); } 更极端的情况下,如果整个表单提交代码都像上面,再封装下,传form,success callback, failure callback似乎可以完成要求。 ![]() |
|
返回顶楼 | |
发表时间:2008-02-25
你的方法正是我想實現的方法,但實際上不能完全實現
例如以下這兩個很相似的function,但parameter數量不一樣,function的起初又有一點點分別, 這樣便很難用一個object便可以實現 function formEnquiry(frmObj,validObj){ var pars=Form.serialize(frmObj.id); var url = frmObj.action; setLog(url+'?'+pars,'ajax'); ajaxObj = new Ajax.Request( url, { method: 'post', postBody: pars, asynchronous: false, onCreate:toggleLoadingCorner, onFailure:formFailure, onSuccess:function(result){ formResponse(result,frmObj,validObj); }, onComplete:function(){ toggleLoadingCorner(); _frmSubmitCnt=0; if (frmObj['actionID'].value=='del'){ window.setTimeout(function() { history.back(); },8000); } } } ); } function formEnquiry(frmObj,validObj,FCKlist){ if (frmObj['actionID'].value=='del'){ var hiddenVal=frmObj.getInputs('hidden'); hiddenVal.invoke('enable'); var pars=Form.serializeElements(frmObj.getInputs('hidden')) + "&submitBtn=" + frmObj['submitBtn'].value; } else { var pars=Form.serialize(frmObj.id); } var url = frmObj.action; setLog(url+'?'+pars,'ajax'); ajaxObj = new Ajax.Request( url, { method: 'post', postBody: pars, asynchronous: false, onCreate:toggleLoadingCorner, onFailure:formFailure, onSuccess:function(result){ formResponse(result,frmObj,validObj,FCKlist); }, onComplete:function(){ toggleLoadingCorner(); _frmSubmitCnt=0; if (frmObj['actionID'].value=='del'){ window.setTimeout(function() { history.back(); },8000); } } } ); } |
|
返回顶楼 | |