【问题标题】:Handle Ajax sucess and error in jsp在jsp中处理Ajax成功和错误
【发布时间】:2018-02-15 05:13:47
【问题描述】:

我在 JSP 中有一个表单,它有两个输入框以及像这样的提交和清除按钮

<form name="loginForm" method="GET" action="Ajaxexample" id="loginForm">
 <table>
 <tr>
 <td>From Date</td><td><input type="text" name="n1" value=""/></td>
 </tr>
 <tr>
 <td>End Date</td><td><input type="text" name="n2" value=""/></td>
 </tr>
 <tr></tr>
 <tr>
 <td><input type="submit" name="validpro_insert" value="Insert"></td>
 <td><input type="reset" name="validpro_clear" value="Clear"></td>
 </tr>                     
 </table>
 </form>

因为我在表单标记中使用 get 方法调用了 servlet,该方法用于通过 JDBC API 从数据库获取数据并处理响应,所以我使用了这样的 ajax

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    

         processRequest(request, response);
         System.out.println("In get");
          PrintWriter out = response.getWriter();
          String responseStr = "";
          responseStr = addUser(request); // Return either error/success
          System.out.println("Reponse:" + responseStr);  
           response.setContentType("application/json"); 
           response.setCharacterEncoding("utf-8"); 
           response.getWriter().write(responseStr);
           out.print(responseStr);

因为我必须编写一些代码来从 servlet 中的 DB 获取数据并将响应返回给 ajax,ajax 像这样在同一个 jsp 上处理成功和错误

<script type="text/javascript" src="js/jq.js"></script>   
   <script type="text/javascript">

        var form = $('#loginForm');
        form.submit(function () {
        $.ajax({
        type: form.attr('method'),
        url: form.attr('action'),
        data: form.serialize(),

          error: function (theRequest,textStatus, errorThrown) {
                     // Success = false;
                      alert (theRequest.responseText);
                      alert(errorThrown);
                   alert('No graph found');//doesnt goes here
            },
        success: function (data) {

                var result=data;
                alert(result);
        }     
                });
                return false;
            });
        </script>

但问题是我没有从 ajax 中的 servlet 获得任何值来处理成功或错误

我认为由于 servlet doget() 方法代码而面临这个问题。如果还有其他问题,请告诉我。任何帮助都应该感谢

【问题讨论】:

    标签: java ajax jsp


    【解决方案1】:

    通过我的代码中的这些更改,它可以成功运行

     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
                response.setContentType("text/html;charset=UTF-8");
                try (PrintWriter out = response.getWriter()) 
    
                     String responseSend = "";
    
                String from = request.getParameter("n1");
                String to = request.getParameter("n2");    
    
                  if ((from == null) || (from.equals(""))) {
    
                    System.out.println("From null");
                    responseSend = "error";
    
                } 
                  else if ((to == null) || (to.equals(""))) {
    
                    System.out.println("End null");
                   responseSend  = "error";
    
                }
                  else{            
                          //jdbc code              
                System.out.println("got it");
                int n1 = Integer.parseInt(request.getParameter("n1"));
                int n2 = Integer.parseInt(request.getParameter("n2"));
                responseSend = "code";           
                  }
    
                 out.print(responseSend);
    
            }          
                }
    
            @Override
            protected void doGet(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
               System.out.println("In get");
                processRequest(request, response);
        }
    

    由于我添加了一个带有请求和响应参数的新方法 processrequest(),它将文本/HTML 返回到同一 jsp 上的 Ajax 代码。首先,我对 ajax 代码中的成功/错误感到困惑,但现在我发现那个

     error: function (theRequest,textStatus, errorThrown) {
                              alert (theRequest.responseText);
                              alert(errorThrown);
                    },
    
      success: function (data) {
    
                    var result=data;
                    alert(result);
            }   
    

    当它在给定的 URL 上没有找到 servlet 时将调用错误,当它成功调用具有给定类型和 servlet URL 的 servlet 时将调用成功。

    【讨论】:

      【解决方案2】:

      我在此处粘贴了运行良好的代码

      尝试改变你的参数

      您的 JSP 页面

      <script src="http://code.jquery.com/jquery-1.10.2.js"
      type="text/javascript"></script>
      

      <form id="form">
          Enter Your Name: <input type="text" id="userName" />
      </form>
      <br>
      <br>
      
      <strong>Ajax Response</strong>:
      <div id="ajaxGetUserServletResponse"></div>
      

      这是你的 ajax

      $(document).ready(function() {
      $('#form').submit(function() {
          $.ajax({
              url : 'GetUserServlet',
              data : {
                  userName : $('#userName').val()
              },
              success : function(responseText) {
                  $('#ajaxGetUserServletResponse').text(responseText);
              }
          });
      });
      

      });

      你的 servlet 文件

      import java.io.IOException;
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      public class GetUserServlet extends HttpServlet {
      private static final long serialVersionUID = 1L;
      
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
          String userName = request.getParameter("userName").trim();
          if(userName == null || "".equals(userName)){
              userName = "Guest";
          }
      
          String greetings = "Hello " + userName;
      
          response.setContentType("text/plain");
          response.getWriter().write(greetings);
      }
      
      }
      

      【讨论】:

      • 您还没有从您的 ajax 代码发送请求类型,那么您是如何进入 servlet 的。基本上,我对从 servlet 返回的数据有疑问,然后会先执行成功或错误。
      • 不需要,因为默认请求类型是“GET”
      • 成功时不要将参数值分配给另一个变量直接使用它这样成功:function(data){ alert(data); }
      • 我刚刚成功地为另一个目的分配了这个变量,但我担心我无法通过使用 response .getWriter().write(greetings) 成功地从 doget() 方法获取数据所以正如我在给定答案中提到的那样,我为此目的使用了 PrintWriter
      • 在谷歌浏览器中打开页面通过按 ctrl+shift+i 并转到网络选项卡打开开发者模式并检查提交表单时您的 servlet 文件返回的内容,只要您单击/提交表单显示您的 servlet 文件名单击它并检查返回数据并检查单击按钮后您的文件是否显示在网络选项卡中
      猜你喜欢
      • 2017-07-26
      • 1970-01-01
      • 2020-06-11
      • 2015-10-10
      • 1970-01-01
      • 2011-09-28
      • 2012-11-01
      • 2014-08-12
      • 2023-03-24
      相关资源
      最近更新 更多