我正在开发一个项目,在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属性,我无法找出原因。
这是萤火虫读数: 注意它是如何说“OPTIONS”而不是“GET”。我怀疑这是一个线索,但是当我明确地将type属性设置为“GET”时,我不明白为什么浏览器会以这种方式解释请求。
在servlet中,我写了一些println语句,但它们甚至没有被打印到Eclipse控制台,所以我知道servlet甚至没有被调用。
我知道URL是正确的,因为我在FireFox中打开了一个新选项卡,将URL输入到地址字段中,并立即从servlet获得了正确的响应。所以AJAX代码有点麻烦。在这一点上,我看不到森林的树木。
请告知。
艾伦
答案 0 :(得分:0)
您可能会意外发出CORS请求,例如,您正在从localhost
向127.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预检请求,但由于您的服务器未配置而失败了