$ .ajax不适用于GET

时间:2012-04-26 19:48:01

标签: rest jquery

我有XML和JSON格式的REST服务:

http://localhost:5050/rest/rest/report/check/ {ID} / {校验} .XML http://localhost:5050/rest/rest/report/check/ {ID} / {校验}上传.json

示例:调用http://localhost:5050/rest/rest/report/check/420/339d9146ddd3d6646a1fe93ddf4d7ab8c4a51c61.xml将返回结果:

<report>
  <id>420</id>
  <checksum>339d9146ddd3d6646a1fe93ddf4d7ab8c4a51c61</checksum>
  <checksumValid>true</checksumValid>
  <reportName>sprawozdanie 1</reportName>
  <userName>John Smith</userName>
  <state>robocze</state>
</report>

现在我想从JQuery调用REST服务(xml或json,我不在乎)。

我的工作是:

$.ajax({
    type:"GET",
    url:"http://127.0.0.1:5050/rest/rest/report/check/" + obj.id + "/" + obj.checksum + ".xml",
    success:function (data, textStatus) {
        alert('success...');
    },
    error:function (xhr, ajaxOptions, thrownError) {
        alert("thrown: '" + thrownError + "', status: '" 
        + xhr.status + "', status text: '"
         + xhr.statusText + "'");
    }
});

我最终调用了错误函数,结果为:

抛出:'',状态:'0',状态文字:'错误'

我做错了什么?

3 个答案:

答案 0 :(得分:2)

由于原始政策相同,您需要使用localhost代替127.0.0.1

答案 1 :(得分:0)

好的,所以这个问题很简单,显然我以前习惯了它并且忘了它(该死的我需要一个维基:))。

问题所谓的“跨域”在我的spring-mvc休息项目中被聋人所禁止。

我所做的是创建一个新的过滤器

public class OptionsHeadersFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE");
        response.setHeader("Access-Control-Max-Age", "360");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");

        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {
    }

    public void destroy() {
    }
}

并将其添加到我的web.xml

<filter>
    <filter-name>OptionsHeadersFilter</filter-name>
    <filter-class>poi.rest.OptionsHeadersFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>OptionsHeadersFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

答案 2 :(得分:0)

同意相同的原产地政策。这是测试是否是这种情况的快速方法:

  1. 通过命令行启动chrome,使用 “--user-data-dir = C:\ deleteAfterwards --disable-web-security”
  2. 尝试相同的查询
  3. 如果有效,那么您的问题是相同的原始政策。此策略对于在开发环境中工作非常痛苦,因为您必须在同一主机上托管您的Web服务(不允许别名)和端口作为托管JavaScript的站点。

    您可以使用代理服务器通过同一服务器托管服务和网站。本文是Apache(WAMP)的一个很好的参考,如果你碰巧使用它: