Jquery ajax在localhost错误上调用webservice

时间:2014-02-24 11:52:50

标签: javascript jquery json web-services

我写了一个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”。

哪个...对我来说都是法国人...我不懂法语..所以你去。

1 个答案:

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