停止XHR响应OPTIONS请求

问题描述 投票:-1回答:1

我建立这将在Azure的功能和一个Web应用程序,将在Azure Blob存储托管托管的API。这意味着我的API必须从用户的浏览器选项请求做出响应(使用邮差或卷曲时,这是不是一个问题)。

我的API适当地响应OPTIONS请求,所以这个删除任何CORS问题。

当服务器响应到客户端Javascript的选项,就会出现问题。它似乎正在作为回应,而忽略真实的反应。如何从接受选项响应停止XHR?

这里是我的功能:

function makeRequest(method, url, data) {
  document.body.style.cursor = "wait";
  return new Promise (function (resolve, reject) {
    let xhr = new XMLHttpRequest();
    xhr.open(method, url)
    xhr.onload = function () {
      if (this.status == 200) {
        authToken = this.getResponseHeader('Authorization');
        document.body.style.cursor = "initial";
        console.log('responseText');
        console.log(this.responseText);
        resolve(JSON.parse(this.responseText));
      } else if (this.status == 403) {
        logout();
        document.body.style.cursor = "initial";
        reject({
                    status: this.status,
                    statusText: xhr.statusText
                });
      } else {
        document.body.innerHTML = 'Error: ' + this.responseText;
        document.body.style.cursor = "initial";
        reject({
                    status: this.status,
                    statusText: xhr.statusText
                });
      }
    };
    xhr.onerror = function () {
            document.body.innerHTML = 'Error: ' + this.responseText;
            document.body.style.cursor = "initial";
            reject({
                status: this.status,
                statusText: xhr.statusText
            });
        };
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.setRequestHeader("Authorization", authToken);
        xhr.send(data);
  });
} 

这工作,但因为我的应用程序需要能够在移动到下一个事情之前,等待来自该函数的回应,我不能用它:

function retrieveCategories(active) {
  document.body.style.cursor = "wait";
  var data = JSON.stringify({
  "active": active
});
console.log(data);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4 && this.status == 403) {
    logout();
    document.body.style.cursor = "initial";
  } else if (this.readyState === 4 && this.status != 200) {
    document.body.innerHTML = 'Error: ' + this.responseText;
    document.body.style.cursor = "initial";
  } else if (this.readyState === 4 && this.status == 200) {
    authToken = this.getResponseHeader('Authorization');
    categories = JSON.parse(this.responseText);
    document.body.style.cursor = "initial";
  }
});

xhr.open("POST", "http://127.0.0.1:7071/retrievecategories");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", authToken);

xhr.send(data);
}

想法非常感谢!

javascript ajax xmlhttprequest
1个回答
-1
投票

@Quentin是正确的,因为我本来以为XHR没有响应OPTIONS响应。服务器发送了格式错误的响应

© www.soinside.com 2019 - 2024. All rights reserved.