ajax 就绪状态达到 4 但状态始终为 200
ajax ready state reachs 4 but status always is 200
我的ajax代码是:
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
alert(xhr.status);
if (xhr.status == 200) {
alert("200");
}
else if (xhr.status == 8001) {
alert("8001");
}
else if (xhr.status == 8000) {
alert("8000");
}
else if (xhr.status == 7000) {
alert("7000");
}
else {
alert("x");
}
}
};
xhr.open("POST","URL",true);
xhr.send(null);
我在 xhr.open 中提到的页面代码是:
if (request.getSession().getAttribute("SATI_UID") == null) {
response.sendError(8000);
} else {
response.sendError(8001);
}
它在 firefox 和 chrome 中有效,但在 safari 中我总是获得状态 200。
我使用野生动物园 5.1.7。我也使用 response.setStatus
而不是 response.sendError
但它不起作用。
有人知道为什么会这样吗?
您需要在您的 servlet 上设置响应服务器端的状态。
AJAX 客户端将收到响应并将状态代码存储在 xhr.status。
它应该是有效的 HTTP status code。
不要忘记必须在提交响应和发送任何 headers 之前设置响应代码。
您可能希望使用 HttpServletResponse#setStatus or HttpServletResponse#sendError 来完成此操作。
或者您可能想在 web.xml 上定义一个错误页面。查看:How to set HTTP status code in JSP error handlers
我认为这是因为您使用了非标准的 http 法规。您应该抛出正确类型 4xx 或 5xx 的错误(参见 http status codes) because this code has a real signification in the HTTP protocol,然后在响应正文中为您的错误设置您自己的自定义代码。
总而言之,不应使用 http 响应的状态代码来发送您自己的状态代码,因为它会破坏协议并可能导致中间件服务器(例如缓存服务器)出现问题。
我的ajax代码是:
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
alert(xhr.status);
if (xhr.status == 200) {
alert("200");
}
else if (xhr.status == 8001) {
alert("8001");
}
else if (xhr.status == 8000) {
alert("8000");
}
else if (xhr.status == 7000) {
alert("7000");
}
else {
alert("x");
}
}
};
xhr.open("POST","URL",true);
xhr.send(null);
我在 xhr.open 中提到的页面代码是:
if (request.getSession().getAttribute("SATI_UID") == null) {
response.sendError(8000);
} else {
response.sendError(8001);
}
它在 firefox 和 chrome 中有效,但在 safari 中我总是获得状态 200。
我使用野生动物园 5.1.7。我也使用 response.setStatus
而不是 response.sendError
但它不起作用。
有人知道为什么会这样吗?
您需要在您的 servlet 上设置响应服务器端的状态。
AJAX 客户端将收到响应并将状态代码存储在 xhr.status。
它应该是有效的 HTTP status code。
不要忘记必须在提交响应和发送任何 headers 之前设置响应代码。
您可能希望使用 HttpServletResponse#setStatus or HttpServletResponse#sendError 来完成此操作。
或者您可能想在 web.xml 上定义一个错误页面。查看:How to set HTTP status code in JSP error handlers
我认为这是因为您使用了非标准的 http 法规。您应该抛出正确类型 4xx 或 5xx 的错误(参见 http status codes) because this code has a real signification in the HTTP protocol,然后在响应正文中为您的错误设置您自己的自定义代码。
总而言之,不应使用 http 响应的状态代码来发送您自己的状态代码,因为它会破坏协议并可能导致中间件服务器(例如缓存服务器)出现问题。