【问题标题】:What is wrong with my HTTP over AJAX (javascript)我的 HTTP over AJAX 有什么问题(javascript)
【发布时间】:2015-10-21 17:03:49
【问题描述】:

我的代码: var answer_array = [];

var req = new XMLHttpRequest();
req.onload = function() {
    answer_array = answer_array.concat(JSON.parse(this.responseText).results);

    console.log(answer_array);

}

req.open("GET", "https://api.comettracker.com/v1/gpsdata?fromdate=2015-10-13");
req.setRequestHeader("authorization", "Basic Base64 encoded credentials");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("postman-token", "b94725ff-408b-c82e-a985-6c38feb380af");
req.send();

这是我控制台中的内容: scripts2.js:22 选项https://api.comettracker.com/v1/gpsdata?fromdate=2015-10-13(匿名函数)@scripts2.js:22 2015-10-21 12:41:09.059 index.html:1 XMLHttpRequest 无法加载 https://api.comettracker.com/v1/gpsdata?fromdate=2015-10-13。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 405。

当我转到 Chrome 上的网络标签时,我看到了这个: gpsdata?fromdate=2015-10-13 选项 405 xhr scripts2.js:22 0 B 452 ms

【问题讨论】:

  • 好吧,这是一个 CORs 问题。
  • 这是否意味着我无法从浏览器运行此脚本?
  • 不,是的:这意味着它是服务器端的东西。如果您有权访问服务器端代码,则必须将“修复”放在那里

标签: javascript ajax http authentication basic-authentication


【解决方案1】:

这个错误信息:

No 'Access-Control-Allow-Origin' header is present on the requested resource

意味着您遇到了跨域权限问题,这意味着您正在尝试访问一个不允许从您的页面所在的域访问的站点。如果您的页面位于使用file:// URL 访问的本地驱动器上,那么您可以做的第一件事是将其放在实际的Web 服务器上并在那里尝试,因为file:// URL 对它们有一些额外的限制。

如果这也不起作用,那么问题是 api.comettracker.com 站点不允许从您的特定站点进行访问。

当我将您的代码放入 jsFiddle 并在那里尝试并查看网络跟踪时,我看到用于预飞行跨源请求的 OPTIONS 方法被 api.comettracker.com 拒绝告诉浏览器当前格式的跨源请求是不允许的。

如果从请求中删除了您的自定义标头,我会收到另一个错误,因此我认为您的自定义标头有一些不正确的地方。由于我不知道那个特定的 API,没有您的访问凭据或知道如何使用它们,我不知道对标头的确切建议,但我认为这是开始的地方。

【讨论】:

  • 你认为如果我在没有浏览器的情况下像“批处理”那样运行我的javascript,我会遇到同样的问题吗?我以前通过 AJAX 制作过 HTTP,但这是我第一次使用基本身份验证。
  • @VanessaTorres - 只有浏览器具有跨源保护。因此,如果您在其他一些 Javascript 环境(例如 node.js)中运行脚本,则不会出现此跨源问题。
  • 感谢您的帮助。当我尝试使用 node.js 运行它时,另一个问题是我收到了这条消息,但我不知道会是什么? var req = new XMLHttpRequest(); ^ ReferenceError: XMLHttpRequest is not defined at Object. (/Users/vanessa/Desktop/APIClient/scripts/scripts2.js:10:19)
  • @VanessaTorres - node.js 中没有XMLHttpRequest。那是一个特定于浏览器的对象。您可能希望使用 node.js 中的 request() 模块来发出请求,或者您可以只使用 http module (尽管请求模块为此提供了更多功能)。如果你想这样做的话,node.js 中甚至还有一个module that makes an XMLHttpRequest object
  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2013-11-25
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多