跨域GET请求,浏览器和本地主机之间的差异进行调用
Cross-domain GET request, difference between browser and localhost making the call
我尝试从本地托管的流星应用程序(=> App running at: http://localhost:3000/
)向API发出GET请求,并在这样做时得到错误:
"XMLHttpRequest无法加载[the-api-url]。请求的资源上没有'Access-Control-Allow-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,参数对象和成功回调函数,数据类型为"jsonp"来处理跨域请求。
我发布了新的代码。现在的错误是响应不正确。(我知道这一点,因为它在我的浏览器中工作,并且响应者与API文档对齐)。响应是"资源解释为脚本,但传输MIME类型文本/html: https://host.com/apps/[my-app-id]/authorize_ad_account?callbac…",但它应该是一个对象的关键'url'和另一件事。当我包含'jsonp'时,我也得到错误"Uncaught SyntaxError: Unexpected token:"。但是上面提到的不正确的响应仍然被记录到控制台,所以我不明白语法错误何时发生,或者在哪里。
同源策略不包括您在地址栏中键入的内容。如果它这样做,你将无法访问任何网站,除非它保存在您的本地机器上!
在您的情况下,为了从jQuery的get中获取所需的资源,您要么需要使用托管在匹配域上的服务器端代理,要么因为您正在使用JSON,请查看您使用的API是否支持JSONP。
有可能获得JSON数据与跨域请求。您必须使用JSONP并定义一个回调方法,该方法必须在调用和JSON数据中。
你的请求:
$.ajax({
type: "GET",
url: auth_ad_act_url + "&callback=?",
jsonpCallback: "jsonCallback",
dataType: "jsonp",
success: function(data) {
// Do something with the data
}
)};
外部服务器的JSON文件:
jsonCallback(INSERT_HERE_THE_JSON_DATA);
如果您无法在外部服务器上添加jsonCallback,请查看CORS。
- 在Jquery调用之间添加其他函数
- new Datamap() 在调用之间保持内存的共享状态
- 在使用JS的Ajax调用中,ajaxComplete和beforesend之间有什么区别
- 什么's使用脚本标记调用文件和ajax之间的区别
- 调用函数和创建函数实例之间的Javascript差异
- AJAX 调用和表单提交之间的延迟
- 调用焦点时,按钮和跨度之间的区别是什么
- 异步函数调用是否可以在两个同步语句之间完成
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 在使用ajax调用的函数之间调用相同的函数
- 此函数调用之间有什么区别
- AngularJS:js-factory service在调用之间的流程
- (html) Google 地图搜索结果与 Maps/地点 API 调用之间的差异(结果较少)
- 对字符串对象调用 .localeCompare 与构造特制的 Intl.Collator 对象之间的性能差异
- 直接调用方法和使用“.call”方法之间的区别?WSS
- 在视图模型之间调用(KnockOutJS)
- 在行/单元格之间调用表的Onmouseout函数
- 如何在两个函数之间调用变量
- 如何在Javascript中不同对象之间调用方法
- 在脚本标记块之间调用JavaScript函数