Javascript 聚合物芯ajax跨域问题

Javascript 聚合物芯ajax跨域问题,javascript,jquery,cross-domain,polymer,Javascript,Jquery,Cross Domain,Polymer,我正在尝试使用聚合物和组件进行跨域调用。我不断返回请求的资源上不存在“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="{{comme

我正在尝试使用聚合物和组件进行跨域调用。我不断返回请求的资源上不存在“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使用的聚合物不是,我该如何绕过它?我已经检查了控制台,所有东西看起来都一样(标题、参数等)。

正如上面注释中恰当命名的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>


不推荐使用的核心共享库替代了polymer jsonp

在本说明中,polymer jsonp已不推荐使用

备选方案是核心共享库,如下所述:

这里是Github资源


核心共享库支持共享基于JSONP的JavaScript库。

我知道这已经有一段时间了,但最近我遇到了同样的问题,发现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)
    }
}

查看发送了哪些头(特别是发送了
accesscontrolallow-Origin
,以及它的值是什么…)jQuery使用的是
jsonp
。看起来polymer有一个jsonp的例子,但我对polymer的了解还不够,不知道这是否对你有帮助。太棒了!我以为ajax组件会将jsonp集成到其中。也许我错过了一个选择什么的。无论如何,谢谢你给我指出jsonp组件本身。非常好用。请修改您的答案以提高其可读性。现在的语法真的很难理解。
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)
    }
}