![](/img/trans.png)
[英]How can I submit a html form for server-side validation after successful client-side validation with jQuery?
[英]How can I use client and server-side validation while minimizing duplication?
我目前正在驗證服務器端的用戶輸入(PHP)。 客戶端發送XMLHttpRequest調用並標記帶有紅色邊框的無效字段。 其他一切都很棒,除了我認為客戶提出請求需要太長時間,然后注意到他填寫了錯誤的內容。 我想我也應該放置一些JavaScript驗證,以便客戶端不需要等待請求完成。
但是,我不想復制驗證規則和代碼。 有沒有人在雙方都實施驗證,這樣你至少不需要復制驗證規則?
如果重要的話,我正在使用Yii和帶有jQuery的普通舊JavaScript。
編輯:我也覺得客戶端可能在他的計算機上錯誤的時間使基於JavaScript的日期時間檢查變得很糟糕。 這意味着我需要首先從服務器向腳本提供正確的日期時間。
創建一個PHP函數,驗證字段並以通用方式設置它。 因此,您可以在服務器端和客戶端一起使用它。
對於客戶端使用jquery對PHP驗證函數進行一些AJAX調用。
我相信PEAR快速表單允許您同時為客戶端和服務器端添加驗證。
既然你正在使用Yii框架而且Yii提供了一個相當強大的驗證方案,我會看一下擴展表單生成框架以檢查驗證器字段的一些方法,然后將每個驗證類映射到你應該的js函數能寫得很快。
似乎還有一個擴展程序可以為您執行此操作: http : //www.yiiframework.com/extension/jformvalidate/
絕對不要將客戶端日期時間檢查用於任何目的。 你是對的。
所以你想為每個驗證編寫一個代碼。
所以繼續在php中編寫一個函數來進行電子郵件驗證,比方說: validate_email() 。
一旦用戶按下提交,您可以使用ajax將所有數據發送到php代碼並進行驗證。
一旦用戶通過提交階段,您現在可以使用相同的函數validate_email()來驗證$ _POST。
這樣您就編寫了一個代碼,並且更容易維護。
這比javascript慢嗎? 很難說。 請記住,添加額外的jquery驗證插件也會在頁面上加載。 這是一個流行的jquery 驗證插件 ,它的縮小版本為25KB。 現在您的代碼整潔且易於維護。 如果這是一個主頁,並假設您選擇使用插件,那么您剛剛在可能最有價值的目標網頁上節省了25KB的負擔。
如果你的驗證規則可以用正則表達式來描述,你可以在一個地方定義它們,並在你生成的javascript中使用的php代碼中使用相同的正則表達式。
一些偽代碼作為一種可能的方法:
在PHP中:
function validate() {
// Use $_POST to validate whatever items in whatever fashion you want
// and echo a message or some JSON array etc...
}
在javascript(假設jQuery):
$('#formButton').click(function(event){
event.preventDefault();
$.post('/url/of/page', $(this).serializeArray(), function(response){
// Assuming JSON data, but could just be a string or message,
// check for response.success or whatever from validation
if(response.success) $('#form').submit();
else // Some error message or action
});
});
這雖然可能是AJAX調用中的一些開銷,但允許您使用任何您想要的驗證方法,並且無論是從實際的POST還是通過AJAX,都要保持代碼完全相同。 但是,來自PHP的$ _POST迭代的簡單響應並沒有那么多開銷。 這也允許您在需要時運行查詢 - 當然,您希望保持簡單,因為一切都會運行兩次。
起初我可以說從不信任用戶...用戶可以更改java腳本...因此需要服務器端驗證
第二:為什么我們使用客戶端驗證? 速度。
我認為你應該兩種方式使用。 假設你不想浪費用戶的時間
用js驗證並發送數據。 在admin中如果有錯誤的數據退出用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.