2009-07-13 3 views
0

Je travaille avec une application Java, et j'ai un formulaire ajax à partir d'une fenêtre modale. Je voudrais que le code charge la page succès ou erreur dans le modal en fonction des résultats de traitement côté serveur. Le code suivant fonctionne uniquement pour le scénario de réussite.Attraper les erreurs côté serveur à l'intérieur de la soumission de formulaire Ajax

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

Je suis assez nouveau ajax, mais d'après ce que je comprends, il ne suffit pas d'ajouter la « erreur: » partie au script ci-dessus, il ne sera pas détecter les erreurs dans mon code de servlet. Est-il possible de lire un paramètre de requête à l'intérieur de cette fonction? Ou peut-être que je peux utiliser autre chose? S'il vous plaît aider!

Merci, natasha

+0

Puisque vous ne voulez pas modifier le code Java existant, vous devez également nous dire ce que le code java fait quand il a une erreur. Par exemple, peut-être qu'en cas d'erreur, il renvoie un code d'erreur HTTP 500. Ou peut-être renvoie-t-il une réponse HTTP réussie avec une page HTML contenant un certain texte indiquant l'erreur. À moins que nous sachions COMMENT il se comporte avec des erreurs, nous ne pouvons pas vous dire comment détecter et répondre à cela. HTTP par lui-même n'a pas quelque chose appelé un "paramètre de message d'erreur", il doit donc être quelque chose ajouté au-dessus des normes de base. – mcherm

Répondre

0

Votre servlet doit retourner le HTTP status code approprié quand quelque chose d'inattendu se produit (généralement 500). jQuery appelle votre fonction de rappel error lorsque le serveur répond avec un code d'état problématique.

+0

Je ne veux pas modifier le code Java existant qui est utilisé ailleurs. La servlet définit le paramètre du message d'erreur et redirige vers la page d'erreur ou redirige vers la réussite. J'espérais récupérer le paramètre du message d'erreur et déterminer quel html charger en fonction de cette valeur. –

+0

Eh bien, vous allez devoir le modifier pour le faire fonctionner avec AJAX. Bottom line. Maintenant, si vous ne voulez pas jouer avec ce qui est déjà utilisé, demandez à votre Ajax de lui envoyer un paramètre spécial (indiquant qu'il s'agit d'une requête AJAX), et changez le servlet pour rechercher ce nouveau paramètre et réagissez en conséquence. Si le nouveau paramètre n'est pas présent, demandez à la servlet de continuer à faire ce qu'elle fait maintenant. AJAX n'est pas seulement un code côté client, vous devez travailler aux deux extrémités du fil pour que les choses se passent bien. –

0

Si vous ne pouvez pas éviter d'envoyer un code de succès HTTP apparent (1xx, 2xx ou 3xx) même lorsqu'une erreur survient côté serveur, alors jQuery appellera toujours votre fonction success. Vous aurez besoin d'inspecter les données renvoyées dans votre code côté client (JS), pour déterminer ce que vous faites avec les informations renvoyées dans le navigateur.

1

Ceci est un exemple fait en php. J'espère que c'est utile.

<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; 
?> 
Questions connexes