cocos creator封装http请求

NO.1
json转get url参数

参考代码

var jsonData = {
    str: '参数'
}
var params = Object.keys(jsonData).map(function (key) {
    return encodeURIComponent(key) + "=" + encodeURIComponent(jsonData[key]);
}).join("&");
NO.2
封装http短连接

参考代码

//短链接请求
cc.httpReq = function(options) {
    return new Promise((resolve, reject) => {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status < 300)) {
                var res = JSON.parse(xhr.responseText);
                resolve(res);
            }
        };
        xhr.timeout = options.timeout || 50000; // 5 seconds for timeout
        var method = options.method || 'GET';
        var url = options.url;
        options.data = options.data || {};
        if (method == 'get' || method == "GET") {
            var params = Object.keys(options.data).map(function (key) {
                // body...
                return encodeURIComponent(key) + "=" + encodeURIComponent(options.data[key]);
            }).join("&");
            // console.log(`打印请求参数 ${params}`)
            var url = options.url + '?' + params;
            xhr.open(method, url, true);
            xhr.send();
        } else {
            xhr.open(method, options.url, true);
            xhr.setRequestHeader("Content-type", "application/json;charset=utf-8");
            xhr.send(JSON.stringify(options.data));
        }
    });
};
NO.3
使用方式

游戏初始化的时候,在全局js调用上述代码,注册到cc全局

默认使用get方式,详情可参考options参数

代码示例

cc.httpReq({
    url:`https://yapi.dsx2020.com/mock/55/test_1634539777344`,
    data:{
        test:123,
        aa:`aa`,
    },
    method:`post`
}).then((res)=>{
    console.log(`获取网络请求的结果`,res)
})
NO.4
Tips

封装的请求就是XMLHttpRequest对象的封装

本质上和js是一致的

END