【问题标题】:Not able to post data using Ajax on server [duplicate]无法在服务器上使用 Ajax 发布数据 [重复]
【发布时间】:2016-02-11 12:55:45
【问题描述】:

我正在尝试使用 Ajax 发布请求在服务器上发送令牌。这是单独运行的基本 html 代码http://localhost:56471

$.ajax({
      type: 'POST',
      url: 'http://localhost:8080/sometoken' ,
      contentType: 'application/octet-stream; charset=utf-8',
      success: function(result) {
        // Handle or verify the server response.
          console.log("Result is: " + result);
      },
      processData: false,
      data: sometoken,
    });

我在 8080 端口上运行的 servlet 应用程序试图获取令牌

public void doPost(HttpServletRequest req, HttpServletResponse resp)throws IOException {
       String name=req.getParameter("token");
       response.setContentType("text/plain");
       response.setCharacterEncoding("UTF-8");
}

我对 servlet 完全陌生。这是我的第一个 servlet。调用 ajax 帖子时出现错误XMLHttpRequest cannot load http://localhost:8080/sometoken. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:56471' is therefore not allowed access.

谁能帮我这个帖子请求没有错误?

谢谢

【问题讨论】:

标签: java ajax servlets


【解决方案1】:

你的问题是著名的 CORS (CROSS ORIGIN RESOURCE SHARING)

跨域或跨域 AJAX 请求是来自网络的请求 托管在域 X 上的页面到托管在域 Y 上的服务器。作为安全 预防措施浏览器禁止这样做,除非服务器说它是 可以通过发送适当的 Http 标头 (http://codepen.io/nicohaemhouts/post/cross-domain-ajax-with-tomcat-and-jquery)。

据我了解,既然您是这两个域的所有者,那么您可以通过启用跨域信息交换来克服这个问题。这可以通过修改您从中请求信息的服务器的默认行为来完成。

这可以通过修改 web.xml 并应用一个过滤器来完成,该过滤器将简单地允许这种交换:

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

假设你使用的是Tomcat,其他配置也是可以的。只看tomcatsapi

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多