|
|
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已! |
|
恭喜您是本站第 1729107
位訪客!
登入 | 註冊
|
|
|
|
發表者 |
討論內容 |
冷日 (冷日) |
發表時間:2010/3/31 11:40 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [分享]jQuery Validation如何使用Ajax驗證!
- 很多地方都有提到jQuery-Validation的『remote』!
例如:
remote: {
url: "ajax/validateUserName.action", //後台處理程序
type: "post", //數據發送方式
dataType: "json", //接受數據格式
data: { //要傳遞的數據,默認已傳遞應用此規則的表單項
email: function() {
return $("#email").val();
}
}
注意:remote是遠程驗證:比如註冊驗證用戶名是否已被註冊,返回值只能是true(驗證成功)或false(驗證失敗)。
可是,那個『dataType: "json"』雖然已經成為標準了,但無緣無故(真有這麼大量的資料要傳輸,要用到json!?)為啥要去用她!?
而且,大多數的範例,都不是以php為基礎所寫,頂多就是像上面一樣有提到『返回值只能是true(驗證成功)或false(驗證失敗)』。 但這裡的返回值是return嗎?當然不是!web身為stateless的範本,當然沒啥return可以用! 所以,這裡要用echo!
另外,如果你有特殊的資料要傳遞,要怎麼辦呢? 大家的範例都很一致的告訴你用data來傳資料進去! 這個更好笑,如果走get method的話,本來的資料欄位jQuery名稱就會自己幫我們帶過去了! 那一堆範例又在給妳個email: function() {return ("#email").val();}
是在幹啥呢!?根本是耍寶! 這裡的用法,應該是要把你要傳入的資料更名! 簡單的說,就是讓你的後台可以用同一個變數名稱接前台各種資料欄位! 大家看看後面的範例,應該就懂了,不管是cycle_check_envelopes_01或是cycle_check_pages_01冷日都用「number」這個變數名傳給後端的Ajax程式『testAjaxValidator.php』接,也就是說,後端的php只要去($_REQUEST["number"])就好啦!
最後,還有一個慘痛經驗要告訴大家。 本來冷日就是不想用『dataType: "json"』而開啟這一連串測試。 所以冷日本來很直覺得相信其他網站改用「dataType: "html"」,導致一切悲劇的開始! 反正,後來經測試,不管用Get Method或是Post Method,那個dataType都可以不用給(也不要給,反而容易出亂子)就可以一切正常運作!
來看看冷日的範例吧。 前端JS:
<script type="text/javascript">
//$.validator.setDefaults({ debug: true });
$(document).ready(function() {
$("#FucoCheckEditForm").validate({ //別忘了FormName要對應ㄚ!
// debug : true ,
rules : {
cycle_check_envelopes_01 : {
required : true ,
remote: {
url: "/test/testAjaxValidator.php", //後台處理程序
type: "POST", //數據發送方式
cache: false,
// dataType: "html", //接受數據格式
data: { //要傳遞的數據
number: function() {
return $("#cycle_check_envelopes_01").val();
}
}
}
},
cycle_check_pages_01 : {
required : true ,
remote: {
url: "/test/testAjaxValidator.php", //後台處理程序
type: "POST", //數據發送方式
cache: false,
// dataType: "html", //接受數據格式
data: { //要傳遞的數據
number: function() {
return $("#cycle_check_pages_01").val();
}
}
}
}
},
submitHandler: function() {
alert("檢查完成,可以送出!");
// this.submit();
}
});
$(".cancel").click(function() {
validator.resetForm();
});
});
</script>
後端php:
<?php
$request = intval($_REQUEST["number"]);
//sleep(2);//這是給那些Loading Image作測試用低
//usleep(150000);//這是給那些Loading Image作測試用低
$valid = 'false';
if ( ($request % 2) == 0 ) {
$valid = 'true';
}
echo $valid;
?>
有沒有簡單易懂ㄚ,下課!
|
|
|
討論串
|