2009-07-13 3 views
0

私はJavaアプリケーションを使用しています。モーダルウィンドウからajaxフォームを送信しています。 サーバー側の処理結果に応じて、モーダルで成功またはエラーページをロードするようにします。次のコードは、成功のシナリオでのみ機能しています。Ajaxフォームのサブミッション内でサーバー側のエラーをキャッチ

  $.ajax({ 
       type: "POST", 
       url: action, 
       data: params, 
       success: function() { 
        $("#p_content").load("/test.jsp?id=12345"); 
       } 
      }); 

私はアヤックスにかなり新しいですが、私は「エラー:」を追加するだけでは不十分であることを理解するものから上記のスクリプトの一部を、それは私のサーブレットコードでエラーを検出しません。この関数の中からリクエストパラメータを読み取る方法はありますか?それとも別のものを使うことができますか?助けてください!

おかげで、 ナターシャ

+0

既存のJavaコードを変更したくないので、あなたはまた、エラーが発生したときにJavaのコードが何をするのか、私たちに指示する必要があります。たとえば、エラーが発生した場合は、HTTP 500エラーコードを返します。または、エラーを示す特定のテキストを含むHTMLページで成功したHTTP応答を返します。エラーで動作するかどうかわからない限り、それを検出して対応する方法を教えることはできません。 HTTP自体は "エラーメッセージパラメータ"と呼ばれるものを持っていないので、基本的な標準以上のものを追加する必要があります。 – mcherm

答えて

0

予期しない何かが(通常は500)が発生した場合、適切なHTTP status codeを返す必要がありますあなたのサーブレット。サーバーが問題のあるステータスコードで応答すると、jQueryはerrorコールバック関数を呼び出します。

+0

私は他の場所で使用されている既存のJavaコードを変更したくありません。サーブレットは、エラー・メッセージ・パラメータを設定し、エラー・ページにリダイレクトするか、または成功にリダイレクトします。私は、エラーメッセージのパラメータを取得し、その値に基づいてどのHTMLを読み込むかを決定したいと考えていました。 –

+0

さて、あなたはAJAXで動作するように修正する必要があります。ボトムライン。もしあなたが既にそれを使用しているものを混乱させたくなければ、あなたのajaxに特別なパラメータ(AJAXリクエストであることを示す)を送って、この新しいパラメータを探してそれに応じてサーブレットを変更してください。新しいパラメータが存在しない場合は、サーブレットに今行っている処理を続行させます。 AJAXは単なるクライアントサイドのコードではありません。うまくいくためには、ワイヤの両端で作業する必要があります。 –

0

サーバー側でエラーが発生しても明白なHTTP成功コード(1xx、2xxまたは3xx)を送信できない場合、jQueryは常にsuccess関数を呼び出します。クライアントサイド(JS)コードで返信されたデータを調べて、ブラウザで返された情報で何をするかを判断する必要があります。

1

これはphpで行われた例です。それが役に立つと願っています。

<html><!-- This is index.php --> 
    <head> 
     <script src="js/jquery.js" type="text/javascript"></script><!-- link to jQuery --> 
     <script language="javascript"> 
     $(document).ready(function() { 
      $('input#send').click(function(){ 
       /* Empty div#error and div#result incase they contain info from the last submission */ 
       $('#error').empty(''); 
       $('#result').empty(''); 
       /* Client-side validation */ 
       var name = $("input#name").val(); 
       var age = $("input#age").val(); 
       if (name==''){ 
        alert('Insert your name.'); 
       } 
       else if (age==''){ 
        alert('Insert your age.'); 
       } else { 
        var params = 'name=' + name + '&age=' + age; 
        $.ajax({   
         url:'b.php',   
         type:'post',     
         dataType:'html',    
         data:params, 
         cache: false,    
         success:data  
         }); 
        function data (html) { 
         var $html = $(html); // create DOM elements in a jQuery object 
         /* Return errors from 'b.php' */ 
         $html.filter('#err').appendTo("#error"); 
         /* Return valid Post */ 
         $html.filter('#res').appendTo("#result"); 
         /* Clear name input */ 
         $('input#name').val(''); 
         /* Clear age input */ 
         $('input#age').val(''); 
        } 
       } 
      }); 
     }); 
     </script> 
     <style type='text/css'> 
      #error{ 
       color:maroon; 
       font-weight:bold; 
      } 
      #result{ 
       color:green; 
       font-weight:bold; 
      } 
     </style> 
    </head> 
    <body> 
     <div id="error"></div><!-- View Errors --> 
     <div id="result"></div><!-- View valid Post --> 
     <input type='text' name='name' id="name" value='' /><br/ > 
     <input type='text' name='age' id="age" value='' /><br/ > 
     <input type='submit' name='send' id="send" value='Send' /> 
    </body> 
</html> 

<?php /* This is b.php */ 
if(($_POST['name']=='')||($_POST['age']=='')){ 
    $error = '<div id="err">Error: Fill in ALL fields.</div>'; 
} elseif(is_numeric($_POST['name'])){ 
    $error = '<div id="err">Error: Name should NOT contain numbers.</div>'; 
} elseif(!is_numeric($_POST['age'])){ 
    $error = '<div id="err">Error: Age should ONLY contain numbers.</div>'; 
} else{ 
    $result = '<div id="res">Hi '.$_POST['name'].', you are '.$_POST['age'].' years old.</div>'; 
} 
echo $error; 
echo $result; 
?> 
関連する問題