【问题标题】:jsp page to servlet through ajax and vice versajsp页面通过ajax到servlet,反之亦然
【发布时间】:2013-05-25 20:58:19
【问题描述】:

我正在通过ajax从jsp页面向servlet发送一个orderid,如果订单表的orderid不匹配,它将显示错误 同一jsp页面中的消息,通过该页面可以很好地发出请求。现在我的问题是当我发送一个有效的 orderid 它应该 通过 servlet 将页面转发到另一个 jsp 页面,该页面没有发生并且也没有显示任何错误

jsp页面

  <input type="hidden" name=cmd  value="single"/>
    Enter Order No <input type="text" name="oid" id="oidss" /><input type="button" value="Search" id="finduy" />

jquery 代码

$('#finduy').click(函数(事件){

            $.ajax({
                type:'POST',
                url:"Order",
                style:"full",
                maxRows:12,
                dataType:"json",
                data:{"cmd":"single","oid":encodeURIComponent($('#oidss').val())},

                beforeSend:function(){/*alert("data is sending")*/},
                //problem is here
                success:function(data,textStatus,jqXHR){
                        if(data.success){

                }
                else
                    {
                    alert("invalid Order No");
                    $('#oidss').val("");
                    $('#oidss').focus();


                    }

                },
                error:function(jqXHR, textStatus, errorThrown){
                console.log('textStatus:' + textStatus);
                console.log('errorThrown:' + errorThrown);
                 console.log("Something really bad happened " + textStatus);
                 console.log("jqXHR.responseText " +jqXHR.responseText);

                  $("#ajaxResponse").html(jqXHR.responseText);
            }
            });

servlet 代码

if(!(cmd==null)&&cmd.equalsIgnoreCase("single")){

        OrderDB odb = new OrderDB();
        Order orders =  new Order() ;
        List<OrderDetail> odetaillist = new ArrayList<OrderDetail>();
        List<Order> ordercustlist = new ArrayList<Order>();


        String orderids = request.getParameter("oid");


        try {
            orders = odb.getOrdersById(orderids);
            odetaillist = odb.getOrdersDetailsByOrderId(orderids);
            ordercustlist = odb.getOrderFromCustomer(orderids);
            Customer customerinfo = odb.getOrderCustomer(orderids);
            request.setAttribute("OrderSingle", orders);
            request.setAttribute("OrderDetail", odetaillist);
            request.setAttribute("OrderCust", ordercustlist);
            request.setAttribute("CustomerInfo", customerinfo);
            redirect=orderinfo;
            RequestDispatcher view = request.getRequestDispatcher(redirect);
            view.forward(request, response);

            if(orders.getOrderid() == null){
                JsonObject myobj =  new JsonObject();
                myobj.addProperty("success", false);
                PrintWriter out = response.getWriter();
                out.print(myobj);
                out.close();
                return;
            }



        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

【问题讨论】:

  • 在您的 javascript 方法的 if(data.success) { 段中,您应该将非 ajax 提交发送到您的服务器,然后您将在那里处理转发。请记住,您不能在 ajax 提交中进行转发。
  • 感谢 Luiggi Mendoza .. 我直接通过 jsp scriplets 尝试了它的工作原理,但我想知道是否有任何方法可以通过 ajax 转发到另一个 servlet
  • 有些事情可以在 ajax 调用中做,而有些事情则不能。在您无法直接使用 ajax 处理的事情之间:转发/重定向到另一个页面,上传文件。
  • 我想在用户通过 jsp 或 servlet 输入错误的 'orderid' 时显示警报
  • 消息在视图端处理,而不是在控制器中。看起来您需要了解如何应用 MVC 模式。这意味着您应该在 ajax 响应方法中处理消息(成功、错误等)。

标签: java jquery ajax jsp servlets


【解决方案1】:

您始终可以从 servlet 发回响应代码,然后执行转发。例如,您可以发送成功,在这种情况下,您可以将 document.location 发送到新的 servlet 位置。

现在也可以使用 ajax 在 html5 中上传文件。

【讨论】:

    【解决方案2】:

    我得到了答案,感谢 user1889970 你的技巧有帮助

    我创建了一个新的检查点,它的工作只是检查orderid是否有效,如果有效则转发到新页面或显示无效

    jquery 代码:

     $("#find").click(function(event){
        var cname = $('#oidss').val();
            $.ajax({
                type:'POST',
                url:"Order",
                style:"full",
                maxRows:12,
                dataType:"json",
                data:{"cmd":"find","oid":encodeURIComponent(cname)},
    
                beforeSend:function(){/*alert("data is sending")*/},
                success:function(data,textStatus,jqXHR){
                        if(data.success){
                            window.location.href='Order?cmd=single&oid='+cname;  
                    }
                else
                    {
                    alert("Invalid Order No.");
                     $('#oidss').val("");
                     $('#oidss').focus();
                    }
    
                },
                error:function(jqXHR, textStatus, errorThrown){
                console.log('textStatus:' + textStatus);
                console.log('errorThrown:' + errorThrown);
                 console.log("Something really bad happened " + textStatus);
                 console.log("jqXHR.responseText " +jqXHR.responseText);
    
            }
            });
        });
    

    servlet 代码:

     else if(!(cmd==null)&&cmd.equalsIgnoreCase("find")){
    
            OrderDB odb         =   new OrderDB();
            Order orders        =   new Order() ;
            JsonObject myobj    =   new JsonObject();
    
            PrintWriter out = response.getWriter();
            String orderids = request.getParameter("oid");
    
            try {orders = odb.getOrdersById(orderids);
            if(orders.getOrderid() != null){
                myobj.addProperty("success", true);
            }
            else{
                myobj.addProperty("success", false);
            }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           out.print(myobj);
            out.close();
            return;
        }
    

    cmd=single 的第二部分:

        if(!(cmd==null)&&cmd.equalsIgnoreCase("single")){
    
            OrderDB odb = new OrderDB();
            Order orders =  new Order() ;
            List<OrderDetail> odetaillist = new ArrayList<OrderDetail>();
            List<Order> ordercustlist = new ArrayList<Order>();
            String orderids = request.getParameter("oid");
    
    
            try {
                orders = odb.getOrdersById(orderids);
                odetaillist = odb.getOrdersDetailsByOrderId(orderids);
                ordercustlist = odb.getOrderFromCustomer(orderids);
                Customer customerinfo = odb.getOrderCustomer(orderids);
                request.setAttribute("OrderSingle", orders);
                request.setAttribute("OrderDetail", odetaillist);
                request.setAttribute("OrderCust", ordercustlist);
                request.setAttribute("CustomerInfo", customerinfo);
                redirect=orderinfo;
    
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    

    【讨论】:

      猜你喜欢
      • 2014-06-23
      • 2012-11-09
      • 2014-06-04
      • 2015-11-18
      • 2011-12-28
      • 2014-04-14
      • 2013-02-06
      • 2011-08-04
      • 2016-06-28
      相关资源
      最近更新 更多