vue cli下fetch请求不了?

发布于 2022-09-11 15:14:44 字数 2598 浏览 19 评论 0

题目描述

fetch.js用的网上很通用的一个如下代码

题目来源及自己的思路

代码中配合 async 和 await请求遇到一些问题

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
import { baseUrl } from './env'

export default async(url = '', data = {}, type = 'GET', method = 'fetch') => {

type = type.toUpperCase();
url = baseUrl + url;

if (type == 'GET') {
    let dataStr = ''; //数据拼接字符串
    Object.keys(data).forEach(key => {
        dataStr += key + '=' + data[key] + '&';
    })

    if (dataStr !== '') {
        dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
        url = url + '?' + dataStr;
    }
}

if (window.fetch && method == 'fetch') {
    let requestConfig = {
        credentials: 'include',
        method: type,
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        mode: "cors",
        cache: "force-cache"
    }

    if (type == 'POST') {
        Object.defineProperty(requestConfig, 'body', {
            value: JSON.stringify(data)
        })
    }
    
    try {
        const response = await fetch(url, requestConfig);
        const responseJson = await response.json();
        return responseJson
    } catch (error) {
        throw new Error(error)
    }
} else {
    return new Promise((resolve, reject) => {
        let requestObj;
        if (window.XMLHttpRequest) {
            requestObj = new XMLHttpRequest();
        } else {
            requestObj = new ActiveXObject;
        }

        let sendData = '';
        if (type == 'POST') {
            sendData = JSON.stringify(data);
        }

        requestObj.open(type, url, true);
        requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        requestObj.send(sendData);

        requestObj.onreadystatechange = () => {
            if (requestObj.readyState == 4) {
                if (requestObj.status == 200) {
                    let obj = requestObj.response
                    if (typeof obj !== 'object') {
                        obj = JSON.parse(obj);
                    }
                    resolve(obj)
                } else {
                    reject(requestObj)
                }
            }
        }
    })
}

}

你期待的结果是什么?实际看到的错误信息又是什么?

图片描述

图片描述

接口地址连接超时,并且连参数都传不过去

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逆光下的微笑 2022-09-18 15:14:44

options请求是cors跨域并且发送非简单请求时,浏览器自动发送的preflight request(预检请求), 报TIMEOUT,极有可能是你的后端没有处理好cors跨域,正确处理这个options请求
假设你的后端是用koa写的,请安装使用koa cors中间件https://github.com/koajs/cors; 如果后端不是koa,可以参照koa cors源码,正确处理options请求; 或直接搜索你使用的框架的cors包,安装使用.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文