2012-03-21 11 views
0

私は新しいユーザーを作成するためのjqGridフォームを持っています。私が望むのは、(フォームによって送信された他のフィールドの中で)ユーザー名がデータベースに存在していないことを確認することです。
私はbeforeSubmitアクションを作成しました。これは、送信ボタンが押されたときにフォームが送信される前に実行されます。
私はこの関数がうまくいくと思います。なぜなら、コードは常に "User exists"を返すからです。jqGrid前のAjaxのバリデーション

beforeSubmit:function(postdata、formid){return [false、 "User exist"]; }

しかし、私は、tiは、ユーザー名が既に存在するかどうかを確認するために、サーバーへのAJAXリクエストを作るための$に.getを使用しようとすると、私はいつもk is undefinedエラーを取得します。機能(POSTデータ、フォームID){

$に.get( "?プロジェクト管理、R =ユーザ/ usernameExists & TMPL = JSON &ユーザ名=" :これは、コードエラーを生成します

beforeSubmitです+ postdata.username、function(data){
return [false、 "Exists"];
}); }

これは実際の検証ではないことがわかりますが、最初のスクリプトと同じ結果が得られませんか?あなたが期待するようにあなたのコードが動作しない理由を

どうもありがとうすべての

答えて

0

まず私が説明します。

メソッド$.get作品非同期です。だから、

  • あなたの関数beforeSubmit最初のスタート$.get
  • それはbeforeSubmit関数の本体bacause undefined値が完成する予定返します。
  • その後、非同期$.getリクエストがサーバーからの応答を受け取ると、function(data) {コールバックが呼び出されます(それはsuccessコールバックです)。
  • successコールバックは、コールバックから値return[false,"Exists"];を返します。 $.getsuccessコールバックの戻り値を解析しないため、配列[false,"Exists"]$.getによって破棄されます。

あなたはまったくbeforeSubmitを実装していないされて$.ajaxパラメータの代わりに、回避策として$.getasync: falseとを使用し、より良いことができます。サーバーのコードが、ユーザーの変更を保存できないか、入力フィールドに検証エラーがいくつか含まれていることがわかった場合、サーバーはちょうどerror HTTP status codeの応答を返します。ステータスコードは、検証エラーの場合には400以上、サーバ上で要求を処理する際に何らかのエラーが発生した場合は-で500以上になることがあります。サーバー応答の本体は、jqGridがユーザーに表示するメッセージのHTMLフラグメントにすることができます。

errorTextFormatコールバックに関するエラーメッセージをカスタマイズできます。詳細については、hereおよびhereを参照してください。

+0

ありがとうオレグ。私は別の投稿で見つけたようにafterSubmitを使用し、それは働いた。 – tliokos

+0

@Theodore:ようこそ! – Oleg

関連する問題