如何在 fetch() 中使用 no-cors

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

我有一个问题。我试着解释一下。

我的客户要求我建立一个门户网站,用于在私人服务器上获取和修改数据,并使用基本身份验证。

私有服务器返回XML文件。

我尝试使用 fetch() 获取数据,但出现 CORS 错误。我知道这意味着什么,但我无法控制私人服务器。

所以我想将 fetch() 与 :

一起使用
mode : 'no-cors'

但是如果我这样使用,我可以使用获取的数据。

我认为我有两个主要解决方案:

  • 向您正在使用的 API 添加 CORS 支持。仅当您可以控制目标时,这才有效。
  • 不需要从您的域发出请求,而是需要其他东西为您发出请求。

如果我无法添加 CORS 标头,我可能会想要构建一个小型服务器端脚本来代表我发出这些请求。

我的脚本现在可以调用我的脚本,而不是直接调用目标,该脚本必须在服务器端为您执行请求。

但是,如果我没有服务器,我该怎么办?

如果有人有想法...

非常感谢...

---- 编辑 -----

我的代码:

getListApps: async function () {

            let url = `${SA_BASE_URL}/applications`;

            // Set headers
            let headers = new Headers();
            headers.append('Authorization', 'Basic ' + btoa(SA_LOGIN + ":" + SA_PASSWORD));
            try {
                // GET request
                const response = await fetch(url, { 
                    method: 'GET', 
                    headers: headers, 
                    mode: 'no-cors', 
                    credentials: 'include' })

                if (response.status === 200) {
                    const data = await response.json();
                    this.listApp = data;
                    this.listApp.forEach(app => {
                        if (app.status === "DISCONNECTED") {
                            this.listDecApp.push(app);
                        }
                    });
                    this.nbr = this.listDecApp.length;
                } else {
                    if (response.status === 400) this.errors = ['Invalid app_permissions value. (err.400)'];
                    if (response.status === 401) this.errors = ['Acces denied. (err.401)'];
                }
            } catch (error) {
                console.log(error);
                this.errors = ["Une erreur est survenue lors de la récupération des informations sur le serveur."]
            }
            
        },
javascript ajax cors fetch response
1个回答
0
投票

如果可以使用no-cors,请将其设置在headers中,例如:

var opts = {
  headers: {
    'mode':'cors'
  }
}
fetch(url, opts)

如果你不控制API,你就无能为力。

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