简单的API调用(CORS)无法正常工作

时间:2017-07-27 14:51:49

标签: javascript api xmlhttprequest cors

首先,我是使用API​​的新手。

我正在尝试将最基本的API调用发送到不同的域(天气服务)而不是我自己的客户端。其中,我遇到CORS问题,没有正确的标题等等,所以我尝试通过crossorigin.me指导调用来解决这个问题(从我的代码中的URL可以看出)。

(这不是代码,只是问题 - 向下滚动代码)但是,我的代码目前导致......

console.log(status); //returns 0
console.log(statusText); //returns an empty string

这是完整的代码。

function createCORSRequest(method, url) {
  xhr = new XMLHttpRequest();

  //I work in Chrome, so I only included withCredentials, not accounting for other browsers
  if ("withCredentials" in xhr) {
    xhr.open(method, url, true);
  }
  xhr.send();
  console.log(xhr.status); //returns 0
  console.log(xhr.statusText); //returns empty string
}

createCORSRequest("GET", "https://crossorigin.me/https://www.metaweather.com/api/location/2459115");

如果您直接访问该网站https://crossorigin.me/https://www.metaweather.com/api/location/2459115,我会收到以下消息:来源:标头是必需的。在控制台中,它给出状态代码403 - 但我读到只有服务器可以控制/访问标题,而我(编码器)不能。

1 个答案:

答案 0 :(得分:1)

您正在呼叫xhr.send(),然后立即尝试阅读回复状态。

你必须等到有回应才能做到这一点。

使用加载事件侦听器。

xhr.addEventListener("load", log_status);
xhr.send();

function log_status() {
   console.log(this.status);
   console.log(this.statusText);
}