【发布时间】:2014-06-19 16:18:59
【问题描述】:
我尝试从本地托管的流星应用程序 (=> App running at: http://localhost:3000/) 向 API 发出 GET 请求,但这样做时出现错误:
“XMLHttpRequest 无法加载 [the-api-url]。请求的资源上没有 'Access-Control-Allow-Origin' 标头。因此不允许访问 Origin http://localhost:3000。”
然而,当我将 [the-api-url] 粘贴到浏览器中并按 ENTER 时,相应的 API 响应会显示在我的浏览器窗口中(一个小的 JSON 对象)。我已经阅读了一些关于跨域请求问题的其他 SO 帖子,但我不明白解决方案,或者从我的代码或从浏览器发送 GET 之间有什么区别。有人可以解释为什么会发生这种行为,以及我的代码/设计的适当更改是什么?我现有的代码如下:
$.ajax({
type: "get",
url: auth_ad_act_url,
data: {
ads_token: ACCESS_TOKEN
},
dataType: 'jsonp',
success: function(data, status) {
console.log(data);
}
});
编辑: 我做了一个“get”类型的 jQuery.ajax(),提供了一个 URL、参数对象和成功回调函数,以及 dataType 'jsonp' 来处理跨域请求。
我发布了新代码。现在的错误是响应不正确。 (我知道这一点是因为它可以在我的浏览器中运行,并且响应与 API 文档一致)。响应是“资源解释为脚本,但使用 MIME 类型 text/html 传输:https://host.com/apps/[my-app-id]/authorize_ad_account?callbac...”但它应该是一个带有键 'url' 和其他东西的对象。当我包含“jsonp”时,我还会收到错误“Uncaught SyntaxError: Unexpected token :”。但是上面提到的那个不正确的响应仍然被记录到控制台,所以我不明白那个语法错误是什么时候发生的,或者发生在哪里。
【问题讨论】:
标签: javascript jquery ajax get cross-domain