聚合物核心-ajax跨域问题

时间:2014-07-24 21:05:30

标签: javascript jquery cross-domain polymer

我正在尝试使用Polymer和core-ajax组件进行跨域调用。我一直回到No' Access-Control-Allow-Origin'标头出现在请求的资源上。我的组件代码在

之下
    <core-ajax id="ajax"
        auto
        url="http://api.meetup.com/2/event_comments/?key=MyKey&event_id=191593992&callback=?"
        on-core-response="{{commentsLoaded}}"
        method='GET'
        contentType='text/javascript'
        handleAs="json">
    </core-ajax>

如果我使用jQuery和以下代码段,它可以正常工作

$.getJSON('http://api.meetup.com/2/event_comments/?key=MyKeyc&event_id=191593992&callback=?')

所以我想我的问题是什么voodoo魔法是jQuery使用的聚合物不是,我如何解决它?我检查了控制台,一切看起来都一样(标题,参数等)。

4 个答案:

答案 0 :(得分:4)

正如恰当命名的Jason P在上面的评论中指出的那样,你可以在这里使用polymer-jsonp。

<polymer-jsonp 
    auto 
    url="http://api.meetup.com/2/event_comments/?key=MyKeyc&event_id=191593992&callback=" 
    on-polymer-response="{{commentsLoaded}}">
</polymer-jsonp>

答案 1 :(得分:1)

在本文中,不推荐使用polymer-jsonp。

替代方案是 core-shared-lib ,这里描述: https://www.polymer-project.org/0.5/docs/elements/core-shared-lib.html

这是Github资源https://github.com/Polymer/core-shared-lib

core-shared-lib 支持共享基于JSONP的JavaScript库。

答案 2 :(得分:0)

我知道已经有一段时间了,但我最近遇到了同样的问题,并且发现Iron-ajax会在执行实际请求之前执行选项请求,所以我通过添加过滤器来响应选项请求来解决它。以下是我在Golang的代码,如果有人对这些细节感兴趣的话。

origin := c.Request.Header.Get("origin")
method := c.Request.Method

if strings.ToUpper(method) == "OPTIONS" {
    if origin == "" || strings.HasSuffix(origin, "domainname.com") {
        c.Writer.Header().Set("Access-Control-Allow-Origin", origin)
        c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
        c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
        c.Writer.Header().Set("Access-Control-Allow-Headers", "Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With")
        c.Writer.Header().Set("Access-Control-Max-Age", "1728000")
        c.AbortWithStatus(204)
    } else {
        c.AbortWithStatus(400)
    }
}

答案 3 :(得分:-1)

不推荐使用,core-shared-lib替换了polymer-jsonp