javascript - 从 JavaScript Web 服务客户端发送 CORS POST 请求返回 http 405 错误

标签 javascript jquery web-services rest cors

几天前,我实现了一个网络服务(客户端和服务器)。客户端使用 XMLHttpRequest() 发送请求,一切正常。但是,今天我试图将发送请求更改为 jquery 的 $.ajax();方式。

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

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 {
    }
}

不幸的是,当我发送这个 POST 请求时,我收到了 http 405 错误,这是我错误部分的屏幕截图。 https://www.dropbox.com/s/3wqlqkbnqwnjllx/Screenshot%202015-08-18%2011.27.29.png?dl=0

我应该怎么做才能处理这个问题?

最佳答案

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

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

根据文档 ( http://api.jquery.com/jquery.ajax/ ):

An alias for method. You should use type if you're using versions of jQuery prior to 1.9.0.

关于javascript - 从 JavaScript Web 服务客户端发送 CORS POST 请求返回 http 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32067317/

相关文章:

javascript - 使用 javascript 控制 css 过渡

java - 堆大小问题 - 使用 java 进行内存管理

java - Axis 2 : Unable to engage Rampart module

java - HTTP 状态 415 - 请求实体的格式不受支持

javascript - 获取服务器上的所有 Discord 线程 (Discord.js)

javascript - 您如何使用 React Native 正确地从桥接的 iOS 模块向 JavaScript 发送和接收事件?

Javascript 时间戳无效

javascript - 当我尝试从 Firestore 获取集合时出现问题

javascript - 如何在 jQuery 中让表单提交等待 AJAX 回调?

javascript - 无法在 Django 中使用 jquery 禁用按钮