2012-03-21 29 views
0

我有一個jqGrid窗體來創建新的用戶,我想要的是確保(在窗體提交的其他字段之間)用戶名不存在於數據庫中。
所以我創建了一個beforeSubmit動作,當按下提交按鈕但在提交表單之前執行。
我認爲這個函數可以工作,因爲下面的代碼總是返回「User exists」;jqGrid Ajax驗證裏面beforeSubmit

beforeSubmit:function(postdata,formid){return [false,「User exists」]; }

但是當我嘗試TI使用$不用彷徨發出AJAX請求到服務器,以查看這個用戶名已經存在,我總是得到一個k is undefined錯誤。這是產生誤差的代碼

beforeSubmit:功能(POSTDATA,formid){

$獲得( 「?項目管理R =用戶/ usernameExists & TMPL = JSON &用戶名=」 + postdata.username,function(data){
return [false,「Exists」];
}); }

我知道這不是一個真正的驗證,但不應該產生與第一個腳本相同的結果嗎?

非常感謝

回答

0

首先我解釋一下爲什麼像你期望你的代碼不工作。

方法$.get工程異步。所以

  • 你的函數beforeSubmit首先啓動$.get
  • 然後返回undefined值bacause的beforeSubmit函數體將完成。
  • 然後,在異步$.get請求將得到服務器的響應後,function(data) {回調將被調用(它的回調函數爲success)。
  • 您的success回調返回值return[false,"Exists"];從回調$.get不會分析success回調中的任何返回值,因此數組[false,"Exists"]將被$.get丟棄。

您可以使用$.ajaxasync: false參數,而不是$.get作爲解決辦法,但更好的是沒有實現任何beforeSubmit可言。如果您的基於服務器的代碼發現用戶更改無法保存,或者輸入字段包含一些驗證錯誤,則服務器應該只返回具有一些error HTTP status code的響應。如果出現驗證錯誤,狀態碼可能爲400或更高 - the Client Error或者在處理服務器上的請求時出現其他一些錯誤時,狀態碼可能爲500或更高 - Server Error。服務器響應的主體可以是jqGrid將顯示給用戶的消息的HTML片段。

您可以自定義有關errorTextFormat回調的錯誤消息。有關其他信息,請參見herehere

+0

非常感謝Oleg。我用afterSubmit,因爲我發現在另一篇文章中,它的工作。 – tliokos 2012-03-21 20:37:22

+0

@Theodore:不客氣! – Oleg 2012-03-22 06:09:57