我写了一个web服务,它返回Json格式的数据,我已经尝试过并且测试了所有这些都很好。我现在正在忙着编写一个可以使用html(当然)和jquery来处理实际调用的服务的Web客户端。
这是我用来打电话的jquery片段:
$(document).ready(function() {
$.ajax({
url: "http://localhost:8080/UserStore/webapi/myresource/4"
}).then(function(data) {
alert('id: ' + data.id + ", username: " + data.username + ", password: " + data.password + ", email: " + data.email);
});
});
运行时,我收到以下错误:
XMLHttpRequest无法加载
http://localhost:8080/UserStore/webapi/myresource/4
。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许来源“http://localhost
”。
哪个...对我来说都是法国人...我不懂法语..所以你去。
答案 0 :(得分:1)
作为一种解决方法,如果网站和网络服务在同一台机器上工作,您可以使用机器的公共IP。因此,通过http://<your-public-ip>/
和jQuery url: "http://<your-public-ip>"
访问该页面。
但是这只适用于端口是相同的,我想。
如果站点和服务不在同一端口上,则必须在服务器端实现CORS。 (如果您使用Java EE,我可以发布一个示例。)
编辑:
Maven依赖项:
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>java-property-utils</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>1.9.1</version>
</dependency>
的web.xml
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowGenericHttpRequests</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowSubdomains</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, HEAD, POST, OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Content-Type, X-Requested-With</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>X-Test-1, X-Test-2</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.maxAge</param-name>
<param-value>-1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/rest/*</url-pattern> // map this to your Jersey-Servlet-Path
</filter-mapping>