继续在AJAX请求上出错

时间:2014-03-14 21:25:02

标签: jquery ajax jsp servlets

我正在开发一个项目,在JSP页面中我向URL发出AJAX GET请求:

http://[domain]/ChatEngine/ChatServlet/users/login?roomId=0&name=Alan

这指向我创建的名为ChatServlet的servlet,我的web.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>ChatEngine</display-name>
<servlet> 
   <servlet-name>ChatEngine</servlet-name> 
   <servlet-class>com.tacticalenterprisesltd.chat.servlets.ChatServlet</servlet-class> 
</servlet>

<servlet-mapping> 
 <servlet-name>ChatEngine</servlet-name> 
 <url-pattern>/ChatServlet/*</url-pattern> 
</servlet-mapping> 

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>    
</welcome-file-list>
</web-app>

我的index.jsp jquery AJAX代码如下所示:

    var chaturl = "http://[domain]/ChatEngine/ChatServlet";
    var dataString = "roomId=" + roomID + "&name=" + uname;     
    $.ajax({
      type: "GET",
      url: chaturl + "/users/login", 
      data: dataString,
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      cache: false,
      statusCode: {
          404: function() {
              console.log('404 Could not contact server.');
          },
          500: function() {
              console.log('500 A server-side error has occurred.');
          }
      },
      success: function(msg) {
          ...               
      },
      error: function(err) {
        alert('Login Error: ' + err.responseText + '  Status: ' + err.status + ' Response Status: ' + err.responseStatus); 
      }
    });

当我执行AJAX请求时,它会立即进入error属性,我无法找出原因。

这是萤火虫读数: enter image description here 注意它是如何说“OPTIONS”而不是“GET”。我怀疑这是一个线索,但是当我明确地将type属性设置为“GET”时,我不明白为什么浏览器会以这种方式解释请求。

在servlet中,我写了一些println语句,但它们甚至没有被打印到Eclipse控制台,所以我知道servlet甚至没有被调用。

我知道URL是正确的,因为我在FireFox中打开了一个新选项卡,将URL输入到地址字段中,并立即从servlet获得了正确的响应。所以AJAX代码有点麻烦。在这一点上,我看不到森林的树木。

请告知。

艾伦

1 个答案:

答案 0 :(得分:0)

您可能会意外发出CORS请求,例如,您正在从localhost127.0.0.1发出AJAX请求。即使它们最终位于同一台服务器上,它们也有单独的cookie,浏览器认为它们是不同的服务器。

如果这是问题,您应该将ajax调用更改为

var chaturl = "/[domain]/ChatEngine/ChatServlet";

因此它将使用您当前指向的任何URL。

如果您确实需要Ajax服务器位于其他服务器上,则需要cross site request (CORS)You have to configure the server允许您连接到它。

对于tomcat,您可以使用

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

浏览器在发出真实请求之前发送OPTIONS预检请求,但由于您的服务器未配置而失败了

请参阅http://enable-cors.org/index.html