aef22d76baf9376390b0b99207a3a1faea39b945.js 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. System.register(["cc"], function (_export, _context) {
  2. "use strict";
  3. var _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, error, warn, HttpReturn, HttpRequest, _crd, urls, reqparams, HttpEvent;
  4. _export({
  5. HttpReturn: void 0,
  6. HttpRequest: void 0
  7. });
  8. return {
  9. setters: [function (_cc) {
  10. _cclegacy = _cc.cclegacy;
  11. __checkObsolete__ = _cc.__checkObsolete__;
  12. __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
  13. error = _cc.error;
  14. warn = _cc.warn;
  15. }],
  16. execute: function () {
  17. _crd = true;
  18. _cclegacy._RF.push({}, "806e5t8UetFy4spn89dnuan", "HttpRequest", undefined);
  19. /*
  20. * @Author: dgflash
  21. * @Date: 2022-09-01 18:00:28
  22. * @LastEditors: dgflash
  23. * @LastEditTime: 2022-09-09 18:10:50
  24. */
  25. /**
  26. * 使用流程文档可参考、简化与服务器对接、使用新版API体验,可进入下面地址获取新版本,替换network目录中的内容
  27. * https://store.cocos.com/app/detail/5877
  28. */
  29. /** 当前请求地址集合 */
  30. __checkObsolete__(['error', 'warn']);
  31. urls = {};
  32. /** 请求参数 */
  33. reqparams = {};
  34. /** 请求事件 */
  35. _export("HttpEvent", HttpEvent = /*#__PURE__*/function (HttpEvent) {
  36. HttpEvent["NO_NETWORK"] = "http_request_no_network";
  37. HttpEvent["UNKNOWN_ERROR"] = "http_request_unknown_error";
  38. HttpEvent["TIMEOUT"] = "http_request_timout";
  39. return HttpEvent;
  40. }({}));
  41. /**
  42. * HTTP请求返回值
  43. */
  44. _export("HttpReturn", HttpReturn = class HttpReturn {
  45. constructor() {
  46. /** 是否请求成功 */
  47. this.isSucc = false;
  48. /** 请求返回数据 */
  49. this.res = void 0;
  50. /** 请求错误数据 */
  51. this.err = void 0;
  52. }
  53. });
  54. /** HTTP请求 */
  55. _export("HttpRequest", HttpRequest = class HttpRequest {
  56. constructor() {
  57. /** 服务器地址 */
  58. this.server = "http://127.0.0.1/";
  59. /** 请求超时时间 */
  60. this.timeout = 10000;
  61. /** 自定义请求头信息 */
  62. this.header = new Map();
  63. }
  64. /**
  65. * 添加自定义请求头信息
  66. * @param name 信息名
  67. * @param value 信息值
  68. */
  69. addHeader(name, value) {
  70. this.header.set(name, value);
  71. }
  72. /**
  73. * HTTP GET请求
  74. * @param name 协议名
  75. * @param onComplete 请求完整回调方法
  76. * @param params 查询参数
  77. * @example
  78. var param = '{"uid":12345}'
  79. var complete = (ret: HttpReturn) => {
  80. console.log(ret.res);
  81. }
  82. oops.http.getWithParams(name, complete, param);
  83. */
  84. get(name, onComplete, params = null) {
  85. this.sendRequest(name, params, false, onComplete);
  86. }
  87. /**
  88. * HTTP GET请求
  89. * @param name 协议名
  90. * @param params 查询参数
  91. * @example
  92. var txt = await oops.http.getAsync(name);
  93. if (txt.isSucc) {
  94. console.log(txt.res);
  95. }
  96. */
  97. getAsync(name, params = null) {
  98. return new Promise((resolve, reject) => {
  99. this.sendRequest(name, params, false, ret => {
  100. resolve(ret);
  101. });
  102. });
  103. }
  104. /**
  105. * HTTP GET请求非文本格式数据
  106. * @param name 协议名
  107. * @param onComplete 请求完整回调方法
  108. * @param params 查询参数
  109. */
  110. getByArraybuffer(name, onComplete, params = null) {
  111. this.sendRequest(name, params, false, onComplete, 'arraybuffer', false);
  112. }
  113. /**
  114. * HTTP GET请求非文本格式数据
  115. * @param name 协议名
  116. * @param params 查询参数
  117. * @returns Promise<any>
  118. */
  119. getAsyncByArraybuffer(name, params = null) {
  120. return new Promise((resolve, reject) => {
  121. this.sendRequest(name, params, false, ret => {
  122. resolve(ret);
  123. }, 'arraybuffer', false);
  124. });
  125. }
  126. /**
  127. * HTTP POST请求
  128. * @param name 协议名
  129. * @param params 查询参数
  130. * @param onComplete 请求完整回调方法
  131. * @example
  132. var param = '{"LoginCode":"donggang_dev","Password":"e10adc3949ba59abbe56e057f20f883e"}'
  133. var complete = (ret: HttpReturn) => {
  134. console.log(ret.res);
  135. }
  136. oops.http.post(name, complete, param);
  137. */
  138. post(name, onComplete, params = null) {
  139. this.sendRequest(name, params, true, onComplete);
  140. }
  141. /**
  142. * HTTP POST请求
  143. * @param name 协议名
  144. * @param params 查询参数
  145. */
  146. postAsync(name, params = null) {
  147. return new Promise((resolve, reject) => {
  148. this.sendRequest(name, params, true, ret => {
  149. resolve(ret);
  150. });
  151. });
  152. }
  153. /**
  154. * 取消请求中的请求
  155. * @param name 协议名
  156. */
  157. abort(name) {
  158. var xhr = urls[this.server + name];
  159. if (xhr) {
  160. xhr.abort();
  161. }
  162. }
  163. /**
  164. * 获得字符串形式的参数
  165. * @param params 参数对象
  166. * @returns 参数字符串
  167. */
  168. getParamString(params) {
  169. var result = "";
  170. for (var name in params) {
  171. let data = params[name];
  172. if (data instanceof Object) {
  173. for (var key in data) result += `${key}=${data[key]}&`;
  174. } else {
  175. result += `${name}=${data}&`;
  176. }
  177. }
  178. return result.substring(0, result.length - 1);
  179. }
  180. /**
  181. * Http请求
  182. * @param name(string) 请求地址
  183. * @param params(JSON) 请求参数
  184. * @param isPost(boolen) 是否为POST方式
  185. * @param callback(function) 请求成功回调
  186. * @param responseType(string) 响应类型
  187. * @param isOpenTimeout(boolean) 是否触发请求超时错误
  188. */
  189. sendRequest(name, params, isPost, onComplete, responseType, isOpenTimeout = true) {
  190. if (name == null || name == '') {
  191. error("请求地址不能为空");
  192. return;
  193. }
  194. var url,
  195. newUrl,
  196. paramsStr = "";
  197. if (name.toLocaleLowerCase().indexOf("http") == 0) {
  198. url = name;
  199. } else {
  200. url = this.server + name;
  201. }
  202. if (params) {
  203. paramsStr = this.getParamString(params);
  204. if (url.indexOf("?") > -1) newUrl = url + "&" + paramsStr;else newUrl = url + "?" + paramsStr;
  205. } else {
  206. newUrl = url;
  207. }
  208. if (urls[newUrl] != null && reqparams[newUrl] == paramsStr) {
  209. warn(`地址【${url}】已正在请求中,不能重复请求`);
  210. return;
  211. }
  212. var xhr = new XMLHttpRequest(); // 防重复请求功能
  213. urls[newUrl] = xhr;
  214. reqparams[newUrl] = paramsStr;
  215. if (isPost) {
  216. xhr.open("POST", url);
  217. } else {
  218. xhr.open("GET", newUrl);
  219. } // 添加自定义请求头信息
  220. for (const [key, value] of this.header) {
  221. xhr.setRequestHeader(key, value);
  222. } // xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
  223. // xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
  224. var data = {};
  225. data.url = url;
  226. data.params = params; // 请求超时
  227. if (isOpenTimeout) {
  228. xhr.timeout = this.timeout;
  229. xhr.ontimeout = () => {
  230. this.deleteCache(newUrl);
  231. ret.isSucc = false;
  232. ret.err = HttpEvent.TIMEOUT; // 超时
  233. onComplete(data);
  234. };
  235. } // 响应结果
  236. var ret = new HttpReturn();
  237. xhr.onloadend = () => {
  238. if (xhr.status == 500) {
  239. this.deleteCache(newUrl);
  240. ret.isSucc = false;
  241. ret.err = HttpEvent.NO_NETWORK; // 断网
  242. onComplete(ret);
  243. }
  244. };
  245. xhr.onerror = () => {
  246. this.deleteCache(newUrl);
  247. ret.isSucc = false;
  248. if (xhr.readyState == 0 || xhr.readyState == 1 || xhr.status == 0) {
  249. ret.err = HttpEvent.NO_NETWORK; // 断网
  250. } else {
  251. ret.err = HttpEvent.UNKNOWN_ERROR; // 未知错误
  252. }
  253. onComplete(ret);
  254. };
  255. xhr.onreadystatechange = () => {
  256. if (xhr.readyState != 4) return;
  257. this.deleteCache(newUrl);
  258. if (xhr.status == 200 && onComplete) {
  259. ret.isSucc = true;
  260. if (responseType == 'arraybuffer') {
  261. xhr.responseType = responseType; // 加载非文本格式
  262. ret.res = xhr.response;
  263. } else {
  264. ret.res = JSON.parse(xhr.response);
  265. }
  266. onComplete(ret);
  267. }
  268. }; // 发送请求
  269. if (params == null || params == "") {
  270. xhr.send();
  271. } else {
  272. xhr.send(paramsStr);
  273. }
  274. }
  275. deleteCache(url) {
  276. delete urls[url];
  277. delete reqparams[url];
  278. }
  279. });
  280. _cclegacy._RF.pop();
  281. _crd = false;
  282. }
  283. };
  284. });
  285. //# sourceMappingURL=aef22d76baf9376390b0b99207a3a1faea39b945.js.map