几天前,我实现了一个web服务(客户机和服务器)。客户端用XMLHttpRequest()发送请求,没有问题。然而,今天我尝试将请求从它发送到jquery的$.ajax();way。
为此,这是我的客户端功能:
function ajaxQuery(){
$.ajax({
url: 'http://localhost:8080/recommender/sider/drugs',
method:'POST',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({"uris":["SampleName1", "SampleName2", "SampleName3"],"limit":100 }),
xhrFields: {
withCredentials: true
}
}).done(function(data) { console.log(data) });
}这是我在服务器端使用的过滤器:
public class CORSFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
if (response instanceof HttpServletResponse) {
HttpServletResponse alteredResponse = ((HttpServletResponse) response);
addCorsHeader((HttpServletRequest) request, alteredResponse);
}
filterChain.doFilter(request, response);
}
private void addCorsHeader(HttpServletRequest request, HttpServletResponse response) {
response.addHeader("Access-Control-Allow-Origin", "http://localhost:3000");
response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD");
response.addHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept, X-Requested-By");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Max-Age", "1728000");
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}不幸的是,当我发送这个帖子请求时,我收到了http 405错误,这是我错误部分的截图。https://www.dropbox.com/s/3wqlqkbnqwnjllx/Screenshot%202015-08-18%2011.27.29.png?dl=0
我该如何处理这个问题呢?
发布于 2015-08-18 08:34:23
你实际上是在发送GET请求,而不是POST。你在你的$.ajax中使用了$.ajax。我怀疑您的jQuery版本低于1.9.0,应该使用type。
$.ajax({
...
type:'POST',
...根据文档(http://api.jquery.com/jquery.ajax/):
method的别名。如果在1.9.0之前使用的是type版本,则应该使用jQuery。
发布于 2015-08-18 09:38:44
我认为您需要将数据类型更改为jsonp
{dataType: 'jsonp'}https://stackoverflow.com/questions/32067317
复制相似问题