editRow関数には次のパラメーターがあります。
jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url,
extraparam, aftersavefunc,errorfunc, afterrestorefunc);
現在のコードは使用succesfunc
のみです。サーバーが400以上のHTTPステータスコードを返すことが重要です。そうすると、サーバーの応答はjQuery.ajaxとjqGridによってエラーとして解釈されます。エラーメッセージを表示したり、エラーが発生した場合のその他のアクションを表示するには、 editRow関数のerrorfuncパラメーターを使用する必要があります。
もう1つの小さな発言。の代わりに、jQuery.parseJSONを使用する必要があります。JSON.parse
eval
更新:コメントからの質問にここで答えます。使用することが重要でerrorfunc
あり、常にではないのはなぜsuccesfunc
ですか?さまざまな理由があります。ラベルシュガーの入った箱に塩を入れると、キッチンに苦い影響を与える可能性があります。の異なるコールバック関数の使用法が間違っている場合も、まったく同じですeditRow
。いくつか例を挙げます。
- エラーは、明示的にだけでなく、サーバー部分によって生成される可能性があります。Webサーバーは、SQLクエリなどの他のコードから例外をスローする可能性があります。このようなエラーをすべてキャッチした場合でも、サーバーに送信された入力データの形式が間違っていたり、その他のエラーが発生したりすると、失敗したHTTPステータスとエラーの説明を含む応答が生成される可能性があります。このようなエラー応答により、使用するフレームワーク(ASP.NET、PHPなど)のWebサーバーが生成されます。
- jqGridで使用されるjQueryは、どのサーバー応答が成功し、どのサーバー応答がエラー応答であるかを認識している必要があります。多くの場合、エラー応答には別の形式があるため、jQuery.ajaxによって解析されません(jQueryはJSON文字列からオブジェクトに変換しません)。
- jqGridは、応答が成功したかどうかを知ることが重要です。エラーの場合、jqGridは応答後に1つのことを実行し、成功した応答の場合は別のことを実行します。さまざまなイベントが呼び出され、さまざまなメッセージが表示されます。
エラーの処理について私が書いたのは、一般的なルールです。jqGridは、エラーが発生した場合に多くのイベントを定義します。たとえば、グリッド入力の場合はloadError 、すべてのタイプのフォーム編集の場合はerrorTextFormat、セル編集の場合はerrorCell、インライン編集の場合はerrorfuncです。すべての方法は、エラーが発生した場合、サーバーの応答にエラーに対応するHTTPステータスコードが含まれるという事実に基づいています(400以上)。