Перехват ошибок на стороне сервера при отправке формы Ajax - PullRequest
0 голосов
/ 13 июля 2009

Я работаю с приложением Java, и у меня есть представление формы ajax из модального окна. Я хотел бы, чтобы код загружал страницу успеха или ошибки в модальном режиме в зависимости от результатов обработки на стороне сервера. Следующий код работает только для сценария успеха.

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

Я довольно новичок в ajax, но насколько я понимаю, недостаточно добавить часть "error:" в приведенный выше скрипт, он не будет обнаруживать ошибки в моем коде сервлета. Есть ли способ, как я могу прочитать параметр запроса внутри этой функции? Или, может быть, я могу использовать что-то еще? Пожалуйста, помогите!

Спасибо, наташа

Ответы [ 3 ]

1 голос
/ 27 мая 2012

Это пример, сделанный в 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;
?>
0 голосов
/ 14 июля 2009

Если вы не можете избежать отправки видимого HTTP-кода успеха (1xx, 2xx или 3xx), даже если возникает ошибка на стороне сервера, jQuery всегда будет вызывать вашу функцию success. Вам нужно будет проверить данные, отправленные обратно в ваш код на стороне клиента (JS), чтобы определить, что вы делаете с возвращенной информацией в браузере.

0 голосов
/ 13 июля 2009

Ваш сервлет должен возвратить соответствующий код состояния HTTP , когда происходит что-то непредвиденное (обычно 500). jQuery вызовет вашу функцию обратного вызова error, когда сервер ответит проблемным кодом состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...