鍍金池/ 問答/Linux  HTML/ Vue使用Fetch請(qǐng)求接口返回(Uncaught (in promise) E

Vue使用Fetch請(qǐng)求接口返回(Uncaught (in promise) Error: )

Uncaught (in promise) Error: SyntaxError: Unexpected end of input
    at Object._callee$ (webpack-internal:///./src/config/fetch.js:89:31)
    at tryCatch (webpack-internal:///./node_modules/regenerator-runtime/runtime.js:62:40)
    at Generator.invoke [as _invoke] (webpack-internal:///./node_modules/regenerator-runtime/runtime.js:296:22)
    at Generator.prototype.(anonymous function) [as throw] (webpack-internal:///./node_modules/regenerator-runtime/runtime.js:114:21)
    at step (webpack-internal:///./node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
    at eval (webpack-internal:///./node_modules/babel-runtime/helpers/asyncToGenerator.js:30:13)
    at <anonymous>

圖片描述

圖片描述

import {
    baseUrl
} from './env'

export default async(type = 'POST', url = '', data = {}, method = 'fetch') => {
    type = type.toUpperCase();
    url = baseUrl + url;

    if (type == 'GET') {
        let dataStr = ''; //數(shù)據(jù)拼接字符串
        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',
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

            },
            mode: "no-cors",
            cache: "force-cache"
        }

        if (type == 'POST') {
            Object.defineProperty(requestConfig, 'body', {
                value: JSON.stringify(data)
            })
        }

        try {
            var response = await fetch(url, requestConfig);
            var responseJson = await response.json();
        } catch (error) {
            throw new Error(error)
        }
        return responseJson
    } else {
        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);
                    }
                    return obj
                } else {
                    throw new Error(requestObj)
                }
            }
        }
    }
}

圖片描述

圖片描述

回答
編輯回答
陌上花

async 里面 先返回一個(gè)promise,然后 await 它。

2017年6月19日 07:41
編輯回答
雨蝶
2017年9月2日 08:01
編輯回答
孤星

應(yīng)該是fetch請(qǐng)求返回的data不是json格式所以報(bào)錯(cuò),如果是是用vue的話,不單要檢查一下頁面的接口,還要檢查一下vuex里面的調(diào)的接口是否是返回一個(gè)json格式的數(shù)據(jù)

2017年1月14日 16:53
編輯回答
疚幼

把export default后面的async去掉或者返回一個(gè)Promise對(duì)象

2017年10月8日 09:55