我還修改了jQuery.Validate的remote方法,先來看下我修改的代碼(具體見scripts/jquery.validate1.js 896行):
view sourceprint?01 if (previous.old !== value) { previous.old = value; var validator = this; this.startRequest(element); var data = {}; data[element.name] = value; $.ajax($.extend(true, { //url:url,//此URL無法獲取 url: param.url,//獲取param驗(yàn)證規(guī)則中所寫路徑 mode: "abort", port: "validate" + element.name, type: param.type, dataType: "json", //data:data, data: param.data || data,//獲取param.data或data中所提交的參數(shù) success: function(response) { 以下省略... }
這邊我修改了url和data的獲取方式,主要是因?yàn)樵谡嬲龍?zhí)行的時(shí)候,變量url是空的,所以需要從param中獲取。
而data為什么要改成param.data || data,主要原因就是下面這句代碼:
data[element.name] = value;
這句代碼的意思就是:為哪個(gè)控件設(shè)置遠(yuǎn)程驗(yàn)證就獲取哪個(gè)控件的值,但是在實(shí)際的開發(fā)中,當(dāng)遇到進(jìn)行AJAX驗(yàn)證的時(shí)候會(huì)出現(xiàn)需要同時(shí)提交多個(gè)數(shù)據(jù)的情況,此時(shí)這句代碼就是錯(cuò)誤的了,所以需要改成param.data || data,這樣就能保證在提交多個(gè)數(shù)據(jù)的時(shí)候以多個(gè)數(shù)據(jù)為準(zhǔn)。
下面來看下webservice的代碼:
view sourceprint?1 [WebMethod] public bool CheckUid(string uid) { return uid == "testuid" ? true : false; }
相當(dāng)?shù)暮?jiǎn)單,就是判斷下用戶名是不是指定的用戶名。
注意:webservice.cs中必須將[System.Web.Script.Services.ScriptService]這個(gè)特性取消注釋,否則AJAX驗(yàn)證將無效!
第二點(diǎn):默認(rèn)jQuery.Validate在進(jìn)行AJAX驗(yàn)證時(shí)返回必須是bool類型,如何返回一個(gè)對(duì)象包括錯(cuò)誤消息及驗(yàn)證結(jié)果?(具體見App_Code/WebService.cs/CheckUid)
在第一點(diǎn)中介紹jQuery.Validate知識(shí)的時(shí)候就提到了,jQuery.Validate默認(rèn)直接收true或false,但是在具體的開發(fā)中,我們會(huì)分層開發(fā),三層或者多層,webservice在接收到驗(yàn)證請(qǐng)求后不做具體的處理直接調(diào)用邏輯層的驗(yàn)證方法,交由邏輯層進(jìn)行驗(yàn)證操作(當(dāng)然你也可以把驗(yàn)證全部寫在webservice中,但是這樣就體現(xiàn)不出分層的好處了),此時(shí)的驗(yàn)證會(huì)產(chǎn)生多種情況,以最常見的用戶名驗(yàn)證為例:
1)用戶名已存在,此時(shí)的消息應(yīng)該是“用戶名已存在,請(qǐng)重新輸入!”
2)用戶名不符合規(guī)則,此時(shí)的消息應(yīng)該是“用戶名不符合規(guī)則,請(qǐng)重新輸入!”
3)驗(yàn)證時(shí)出現(xiàn)程序異常,此時(shí)的消息應(yīng)該是“程序出現(xiàn)異常,請(qǐng)聯(lián)系管理員!”
可以看出,僅僅一個(gè)用戶名驗(yàn)證就會(huì)出現(xiàn)這3種信息,如果不返回一個(gè)明確的消息,僅僅告訴用戶“用戶名有誤”,客戶端的使用者將會(huì)相當(dāng)?shù)耐纯啵驗(yàn)槭褂谜卟⒉恢浪挠脩裘斎氲降族e(cuò)在哪了。
出處:博客園
責(zé)任編輯:bluehearts
上一頁 使用jQuery.Validate進(jìn)行客戶端驗(yàn)證(后篇) 下 [1] 下一頁 使用jQuery.Validate進(jìn)行客戶端驗(yàn)證(后篇) 下 [3]
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|