我正在尝试使用聚合物和核心ajax组件进行跨域调用。我一直得到没有"访问-控制-允许-起源"头是存在于所请求的资源。我的组件代码在
下面 <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=?')
所以我想我的问题是什么巫毒魔法是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>
在这一点上,聚合物-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库
我知道已经有一段时间了,但是我最近遇到了同样的问题,并且发现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)
}
}
这是不赞成的,core-shared-lib替代了polymer-jsonp