131 lines
4.4 KiB
TypeScript
131 lines
4.4 KiB
TypeScript
import { _decorator } from 'cc'
|
|
|
|
import { Logger } from './Logger'
|
|
|
|
const { ccclass } = _decorator
|
|
|
|
@ccclass('HttpClient')
|
|
export default class HttpClient {
|
|
public static instance: HttpClient // = new HttpClient();
|
|
|
|
// example
|
|
// HttpClient.instance.request("http://localhost:8080/haohttp/test", ()=>{
|
|
// console.log("http 请求 end=============");
|
|
// }, {"nickName":"jhao", "hh":1, "id":9527});
|
|
|
|
private methodType: string = 'GET'
|
|
|
|
private responseType: XMLHttpRequestResponseType = 'json'
|
|
|
|
private xhr: XMLHttpRequest
|
|
|
|
// --GET or POST
|
|
public setMethod(method: string = 'GET') {
|
|
this.methodType = method
|
|
}
|
|
|
|
public setParams(paramsObj: object): string {
|
|
let resParams = ''
|
|
let nowIndex = 1
|
|
for (const key in paramsObj) {
|
|
if (Object.prototype.hasOwnProperty.call(paramsObj, key)) {
|
|
if (nowIndex === 1) resParams += `${key}=${paramsObj[key]}`
|
|
else resParams += `&${key}=${paramsObj[key]}`
|
|
|
|
nowIndex += 1
|
|
}
|
|
}
|
|
Logger.log(this, 'resParam===============', resParams)
|
|
return resParams
|
|
}
|
|
|
|
public setResponseType(responseType: XMLHttpRequestResponseType) {
|
|
this.responseType = responseType
|
|
}
|
|
|
|
public setContentType() {}
|
|
|
|
public request(url: string, callback: Function, params: any = null, timeOut: number = 5 * 1000) {
|
|
if (params && this.methodType === 'GET') {
|
|
let getParams: string = this.setParams(params)
|
|
// getParams = StringUtil:encodeURI(params)
|
|
getParams = encodeURI(getParams)
|
|
url += `?${getParams}`
|
|
}
|
|
this.xhr = new XMLHttpRequest() // http请求 fget
|
|
// this.xhr = cc.loader.getXMLHttpRequest();
|
|
const xhr: XMLHttpRequest = this.xhr
|
|
xhr.responseType = this.responseType
|
|
xhr.timeout = timeOut
|
|
// xhr.setRequestHeader("Content-Type", "text/plain");
|
|
xhr.onreadystatechange = () => {
|
|
Logger.log(this, 'status======', xhr.status, xhr.readyState, xhr.statusText)
|
|
// if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
|
|
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
const response = xhr.response
|
|
Logger.log(this, 'http response1============', xhr)
|
|
try {
|
|
const testJson = JSON.stringify(response)
|
|
Logger.log(this, 'http response json============', testJson)
|
|
if (callback) {
|
|
callback(true, response)
|
|
callback = null
|
|
}
|
|
} catch (error) {
|
|
Logger.error(this, 'http response json=====error=======', error)
|
|
if (callback) {
|
|
callback(false)
|
|
callback = null
|
|
}
|
|
}
|
|
} else if (xhr.readyState === 4 && xhr.status === 301) {
|
|
// 域名转移
|
|
Logger.log(this, 'http response222============', xhr.getResponseHeader('Location'))
|
|
// console.log("http response333============", xhr.getAllResponseHeaders());
|
|
if (HttpClient.instance == null) HttpClient.instance = new HttpClient()
|
|
HttpClient.instance.request(xhr.getResponseHeader('Location'), callback)
|
|
} else if (xhr.readyState === 4 && xhr.status === 404) {
|
|
Logger.log(this, 'http onError============')
|
|
if (callback) {
|
|
callback(false)
|
|
callback = null
|
|
}
|
|
} else {
|
|
Logger.log(this, 'onreadystatechange else====', xhr.status, xhr.readyState, xhr.response)
|
|
if (xhr.readyState === 4) {
|
|
Logger.log(this, 'http onError else============')
|
|
if (callback) {
|
|
callback(false)
|
|
callback = null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
xhr.onprogress = () => {
|
|
Logger.log(this, 'http onprogress===', xhr.status, xhr.readyState, xhr.response)
|
|
}
|
|
xhr.onerror = () => {
|
|
Logger.log(this, 'http onError============')
|
|
if (callback) {
|
|
callback(false)
|
|
callback = null
|
|
}
|
|
}
|
|
xhr.ontimeout = () => {
|
|
Logger.log(this, 'http ontimeout============')
|
|
if (callback) {
|
|
callback(false)
|
|
callback = null
|
|
}
|
|
}
|
|
Logger.log(this, 'http request==============', url)
|
|
Logger.log(this, 'http request======method========', this.methodType)
|
|
Logger.log(this, 'http request======params========', params)
|
|
xhr.open(this.methodType, url, true)
|
|
xhr.setRequestHeader('content-type', 'text/plain;charset=UTF-8')
|
|
xhr.send(params)
|
|
}
|
|
|
|
public getInfo(callback: Function = null) {}
|
|
}
|