首页 > 解决方案 > 获取请求不返回请求的数据

问题描述

我正在尝试使用 fetch() 请求和适当的标头获取 XML 数据。请求成功,但响应为空。奇怪的是,调试器中的浏览器网络选项卡给了我一个 200 OK 并具有请求的响应有效负载,但即使它存在,我似乎也无法获得这些数据。关于为什么的任何线索?

调试器的快照

data = {
            get:(url)=>{
                return new Promise(resolve => {
                    let auth = new Headers({
                        "username":key.user,
                        "password":key.password,
                        "Accept":"application/xml"                 
                    })
                    
                    fetch(url,{
                        method:"get",
                        mode:"no-cors",
                        headers: auth,
                        credentials:"include"
                    })
                    .then(response => console.log(response))
                    //empty response
                })
            }
        }

标签: javascriptxmlfetches6-promise

解决方案


您正在提出跨域请求,但您说mode:"no-cors",.

mode:"no-cors",意思是“如果我需要许可来做一些跨域的事情,那么不要请求它,也不要抛出错误”。

no-cors — 防止方法是 HEAD、GET 或 POST 以外的任何东西,并且标头不能是简单标头以外的任何东西。如果任何 ServiceWorkers 拦截了这些请求,它们可能不会添加或覆盖除简单标头之外的任何标头。此外,JavaScript 可能不会访问结果响应的任何属性。这可确保 ServiceWorker 不会影响 Web 的语义,并防止因跨域泄漏数据而引起的安全和隐私问题。

由于您需要从跨域请求中读取数据的权限,因此它会默默地失败(因为您明确告诉它这样做)。

使用mode: "cors".


推荐阅读