2015-08-18 76 views
2

几天前,我实现了一个web服务(客户端均为&服务器)。客户发送请求XMLHttpRequest(),这很好。然而,今天我试图改变它的发送请求到jquery的$ .ajax();办法。从javascript web-service客户端发送CORS POST请求返回http 405错误

为此,在这里,这是我的客户端功能:

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

我该怎么处理这个问题?

回答

1

您实际上正在发送GET请求,而不是POST。您在$.ajax中使用了method。我怀疑你有一个低于1.9.0的jQuery版本,而应该使用type

$.ajax({ 
    ... 
    type:'POST', 
    ... 

作为每文档(http://api.jquery.com/jquery.ajax/):

method为的别名。如果您使用1.9.0之前版本的jQuery,则应该使用type

+0

是的,现在可以正常运行。 – zwlayer

0

我认为你需要改变的数据类型为JSONP

{dataType: 'jsonp'}