在Ajax表单提交中捕获服务器端错误

时间:2009-07-13 19:27:38

标签: java jquery ajax

我正在使用Java应用程序,并且我从模式窗口提交了ajax表单。 我希望代码在模式中加载成功或错误页面,具体取决于服务器端处理结果。以下代码仅适用于成功方案。

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

我对ajax很新,但据我所知,将“error:”部分添加到上面的脚本是不够的,它不会检测我的servlet代码中的错误。有什么办法可以从这个函数里面读取一个请求参数吗?或许我可以用别的东西?请帮忙!

谢谢, 娜塔莎

3 个答案:

答案 0 :(得分: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;
?>

答案 1 :(得分:0)

当出现意外情况时(通常为500),您的servlet应返回相应的HTTP status code。当服务器响应有问题的状态代码时,jQuery将调用您的error回调函数。

答案 2 :(得分:0)

如果您无法避免在服务器端发生错误时发送明显的HTTP成功代码(1xx,2xx或3xx),那么jQuery将始终调用您的success函数。您需要检查在客户端(JS)代码中发回的数据,以确定您在浏览器中对返回的信息执行的操作。