2013-04-29 65 views
4

我想做一个简单的ajax调用。无论我做什么,它总是执行错误块。我在doPost中有一个从未命中的sysout。有人请告诉我我做错了什么。这是我的代码。jquery ajax调用不是打到servlet

的JavaScript ----

$.ajax({ 
    url: "GetBulletAjax", 
    dataType: 'json', 
    success: function(data) { 
     alert("success"); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     alert(jqXHR+" - "+textStatus+" - "+errorThrown); 
    }  
}); 

的Java ----

public class GetBulletAjax extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public GetBulletAjax() { 
     super(); 
    } 

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

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     System.out.println("made it to servlet"); 
     PrintWriter out = response.getWriter(); 
     User user = (User) request.getSession().getAttribute("user"); 
     int userId = user.getId(); 
     List<Bullet> bullets; 

     BulletDAO bulletdao = new BulletDAOImpl(); 
     try { 
      bullets = bulletdao.findBulletsByUser(userId); 
      Gson gson = new Gson(); 
      String json = gson.toJson(bullets); 
      System.out.println(json); 
      out.println(json); 
      out.close(); 

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

} 

的web.xml ----

<servlet> 
    <servlet-name>GetBulletAjax</servlet-name> 
    <servlet-class>bulletAjax.GetBulletAjax</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>GetBulletAjax</servlet-name> 
    <url-pattern>/GetBulletAjax</url-pattern> 
</servlet-mapping> 
+1

你回来的错误是什么?什么是'textStatus'和'errorThrown'? – 2013-04-29 00:15:29

+0

警报显示“[object Object] - error - Not Found” – Justin 2013-04-29 00:57:01

回答

4

什么是您的客户的URL?您的网址将是相对的 - 因此,如果您网页的网址为<server>/foo/bar.html,则您的ajax请求将转至<server>/foo/GetBulletAjax。但是你的servlet定义是<server>/GetBulletAjax

将您的ajax请求中的url更改为/GetBulletAjax。您需要前导斜杠来告诉浏览器资源位于网站的根目录之外。

+0

我以前尝试过这种方式,并且在您建议时尝试过。它不起作用。我犯了同样的错误。 – Justin 2013-04-29 02:37:04

+0

我的错误!你完全正确!发送此请求的页面是从我的上下文根目录下的一个目录。我必须改变它../GetBulletAjax和一切运作良好。感谢您的时间。 +1 – Justin 2013-04-29 22:39:51

+0

没问题 - 很高兴我能帮到你。对不起,我没有早点回复你的评论。 – 2013-04-30 00:04:23

1
jQuery文档中

http://api.jquery.com/jQuery.ajax/

类型(默认值:'GET') 类型:字符串 请求的类型(“POST”或“GET”),默认为“GET”。注意:其他HTTP请求方法(如PUT和DELETE)也可以在此处使用,但它们不受所有浏览器支持。

似乎你错过了需要POST的类型属性。如文档所述,默认为GET。你的Servlet中没有doGet来支持它。

$.ajax({ 
    url: "GetBulletAjax", 
    dataType: 'json', 
    type:POST, 
    success: function(data) { 
     alert("success"); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     alert(jqXHR+" - "+textStatus+" - "+errorThrown); 
    }  
}); 
+0

他的'doGet'将请求和响应变量转发给'doPost'。他的代码中有一个“doGet”。 – 2013-04-29 00:48:50

+0

是的,大卫是对的。我试图确定。这不是问题。 – Justin 2013-04-29 02:42:40