成功回调函数将不会调用当Ajax调用的servlet [英] success callback function is not called when ajax call to servlet

查看:209
本文介绍了成功回调函数将不会调用当Ajax调用的servlet的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使依赖下拉列表。对于我创建了一个jsp页面,并通过Ajax调用。在servlet中调用servlet的我使用JSON对象为下拉返回值。值正确进来的JSON对象,但该请求得到了一些错误完成(如成功的方法是没有得到所谓的,而不是错误的方法被调用)。

下面是我的ajax code:

  $阿贾克斯({类型:GET,
             网址:MyServlet指数=+ LISTINDEX,
             数据类型:JSON,
              错误:函数(){

            警报(错误);
              },
            成功:功能(数据){
       尝试{
        变种citiArray = JSON.parse(数据);

        如果(citiArray!= NULL){

        对于(VAR S = 0; S< citiArray.length; S ++){

        VAR系列= citiArray [S]。
        //填充下拉列表
           $(#DNAME)追加。($(<选项>< /选项>中。)VAL(serial.authors1)的.html(serial.authors1));
        }
        }
        }
             赶上(错误){
             警报(ERR);
                 }
            }
     });
 

我的servlet code:MyServlet.java

 公共类MyServlet延伸的HttpServlet {
   / **
 * @see的HttpServlet#的HttpServlet()
 * /
公共MyServlet()
{
    超();
    // TODO自动生成构造函数存根
}

/ **
 * @see的HttpServlet#的doGet(HttpServletRequest的请求,HttpServletResponse的响应)
 * /

保护无效的doGet(HttpServletRequest的请求,HttpServletResponse的响应)抛出了ServletException,IOException异常{

   尝试 {

    的Class.forName(oracle.jdbc.driver.OracleDriver);
    连接CON =的DriverManager.getConnection(JDBC:神谕:薄:// //本地主机:1521 / ORCL,人力资源,密码);

     request.setCharacterEncoding(UTF-8);
    response.setCharacterEncoding(UTF8);
    response.setContentType(应用/ JSON);
    PrintWriter的输出= response.getWriter();

    字符串LISTINDEX =的request.getParameter(指数);
    的out.print(LISTINDEX);
  字符串query2 =?选择模块的过程中,其中的cname =;
 preparedStatement ST2 = CON prepareStatement(query2)。
 st2.setString(1,LISTINDEX);
 结果集RS2 = st2.executeQuery();

  JSONArray uniList1 =新JSONArray();
  而(rs2.next())
   {
       uniList1.add(rs2.getString(模块));
       //System.out.println(rs2.getString("module));
    }


    JSONObject的OBJ =新的JSONObject();
    obj.put(钥匙,uniList1);
    的System.out.println(OBJ);
    的out.print(OBJ);
  }
   赶上(例外五){
        // TODO自动生成的catch块
        e.printStackTrace();
       }
    }
}
 

的web.xml:

 < servlet的名称>&MyServlet LT; / Servlet的名称>
  <的servlet类> com.dac.MyServlet< / Servlet的类>
  < / servlet的>

  < Servlet映射>
  < servlet的名称>&MyServlet LT; / Servlet的名称>
  < URL模式> / MyServlet< / URL模式>
  < / Servlet映射>
 

谢谢 罗希特

解决方案

发送即使抛出异常的响应

 赶上(例外五)
{
    // TODO自动生成的catch块
    e.printStackTrace();
    //发送响应
    的out.print(e.getMessage());
}
 

您可以有误差与详细说明:

 错误:函数(theRequest,theStatus,theError)
 {
    警报(theRequest.responseText);
}
 

而不是

 错误:函数(){

        警报(错误);
          }
 

I am trying to make dependent drop down list. For that I have created a jsp page and in that calling servlet through ajax call .In the servlet I am using Json object for returning values for dropdown . Values are correctly coming in Json object But The request is getting completed with some error (as success method is not getting called instead error method is called ) .

Here is my ajax code :

$.ajax({ type: "GET",   
             url: "MyServlet?index="+listindex, 
             datatype: 'JSON', 
              error : function() {

            alert("Error");
              },
            success : function(data) {
       try{
        var citiArray=JSON.parse(data);

        if(citiArray != null){

        for(var s=0;s<citiArray.length;s++){

        var serial=citiArray[s];
        //populating drop down list
           $("#dname").append($("<option></option>").val(serial.authors1).html(serial.authors1));
        }
        }
        }
             catch(err){
             alert(err);
                 }
            }
     });

My Servlet code :MyServlet.java

 public class MyServlet extends HttpServlet {
   /**
 * @see HttpServlet#HttpServlet()
 */
public MyServlet() 
{
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */

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

   try { 

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con =DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/orcl" ,"hr", "password");

     request.setCharacterEncoding("utf8");
    response.setCharacterEncoding("utf8");
    response.setContentType("application/json"); 
    PrintWriter out = response.getWriter(); 

    String listindex = request.getParameter("index");
    out.print(listindex);
  String query2 = "select module from course where cname=?";
 PreparedStatement st2 = con.prepareStatement(query2);
 st2.setString(1,listindex);
 ResultSet rs2=st2.executeQuery();

  JSONArray uniList1 = new JSONArray();
  while (rs2.next()) 
   {
       uniList1.add(rs2.getString("module"));
       //System.out.println(rs2.getString("module"));
    }


    JSONObject obj = new JSONObject();
    obj.put("key", uniList1 );
    System.out.println(obj);
    out.print(obj);
  }
   catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
    }
}

web.xml:

  <servlet-name>MyServlet</servlet-name>  
  <servlet-class>com.dac.MyServlet</servlet-class>  
  </servlet>  

  <servlet-mapping>  
  <servlet-name>MyServlet</servlet-name>  
  <url-pattern>/MyServlet</url-pattern>  
  </servlet-mapping>  

Thanks Rohit

解决方案

Send a response even if an exception is thrown

 catch (Exception e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
    //send the response
    out.print(e.getMessage());
}

You can have a detailed description of the error with:

 error: function (theRequest, theStatus, theError) 
 {
    alert(theRequest.responseText);
}

instead of

  error : function() {

        alert("Error");
          }

这篇关于成功回调函数将不会调用当Ajax调用的servlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆