CCNetwork.js 8.01 KB
var Common = require('Common');
var Network = require('Network');
/**
 * xlr.open(strMethod, strURL, false);
 * 将这里的异步请求改为同步请求
 * 谨慎使用同步方法,已经被官方废弃,影响用户体验
 */
cc.Class({
    extends: cc.Component,

    statics: {
        //ajax请求函数
        ajax: function (strMethod, strURL, astrContentType, oDataOrPostBody, onSuccess, onError, oScope, oAdditionalData) {
            try {
                var xlr = null;
                var oResult = {};


                if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc.
                    xlr = new XMLHttpRequest(); //Log.info('XMLHttpRequest');
                } else if (window.ActiveXObject) {// code for IE6, IE5
                    xlr = new ActiveXObject("Microsoft.XMLHTTP"); //Log.info('ActiveXObject');
                }

                if (!xlr) {
                    cc.log("Your browser does not support XMLHTTP, using iframe instead..");
                    //退化到使用iframe 在cocos中无用                                      //这里两个函数名需要字符串输入
                    //iframeRequest(strMethod, strURL, astrContentType, oDataOrPostBody, onSuccess, onError, oAdditionalData)
                    return;
                }

                function onStateChange() {
                    // oScope._cLog.screenI("Network.ajax==>"+xlr.readyState+"\r\n");
                    // oScope._cLog.screenI("Network.ajax==>"+xlr.status+"\r\n");
                    if (xlr.readyState == 4) {// 4 = "loaded"
                        if (xlr.status == 200) {// 200 = OK
                            if (null != oScope) {
                                onSuccess && onSuccess.call(oScope, xlr.responseText, oAdditionalData);
                            } else {
                                onSuccess && onSuccess(xlr.responseText, oAdditionalData);
                            }
                        } else {
                            if (null != oScope) {
                                onError && onError.call(oScope, xlr.responseText, oAdditionalData);
                            } else {
                                onError && onError(xlr.responseText, oAdditionalData);
                            }
                        }
                        xlr = null;
                    }
                }



                strMethod = strMethod.toUpperCase();
                var strDataOrPostBody = '';
                if (strMethod == "GET") {

                    //以下这段可使用正则表达式改造
                    if (oDataOrPostBody) {
                        if (strURL.indexOf('?') > 0) { //有问号
                            if (strURL.indexOf('=') > strURL.indexOf('?') //并且有等号在问号右边
                                && strURL.lastIndexOf('&') != strURL.length - 1) //最后一个不是&
                            {
                                strURL = strURL.concat('&');
                            } else { //光有问号没等号
                                cc.log('Unavailable Request URL!');
                                return;
                            }
                        } else {//没问号
                            strURL = strURL.concat('?');
                        }

                        if (typeof oDataOrPostBody == "string") {
                            strDataOrPostBody = oDataOrPostBody;
                        } else if (oDataOrPostBody instanceof Object) {
                            for (var key in oDataOrPostBody) {
                                strDataOrPostBody = strDataOrPostBody.concat(key).concat('=').concat(oDataOrPostBody[key]).concat('&');
                            }
                            strDataOrPostBody = strDataOrPostBody.substring(0, strDataOrPostBody.length - 1);
                            //strDataOrPostBody.TrimEnd('&');
                        } else {
                            cc.log('Unavailable Parameters!');
                            return;
                        }
                    }

                    strURL = strURL.concat(strDataOrPostBody);
                }

                xlr.onreadystatechange = onStateChange;
                // oScope._cLog.screenI("Network.ajax==>"+strMethod+"\r\n");
                // oScope._cLog.screenI("Network.ajax==>"+strURL+"\r\n");
                xlr.open(strMethod, strURL, false);

                var isWWWFormURLEncoded = false;
                if (astrContentType) {
                    for (var i = 0; i < astrContentType.length; i++) {
                        xlr.setRequestHeader('Content-type', astrContentType[i]);
                        if (astrContentType[i] == 'application/x-www-form-urlencoded') {
                            isWWWFormURLEncoded = true;
                            break;
                        }
                    }
                }
                //xlr.setRequestHeader('Connection', 'close');

                switch (strMethod) {
                    case 'GET':
                        xlr.send(null);
                        break;
                    case 'POST':
                        if (isWWWFormURLEncoded) {

                        }
                        if (oDataOrPostBody) {
                            /*
                            if (isWWWFormURLEncoded) {
                                var fd=new FormData();
                                if (typeof oDataOrPostBody == "string") {
                                    strDataOrPostBody = oDataOrPostBody;

                                    var aParameters1=oDataOrPostBody.split('&');
                                    for (var i=0;i<aParameters1.length;i++){
                                        var aPairs1=aParameters1.split('=');
                                        if (aPairs1[0] && aPairs1[1]){
                                            fd.append(aPairs1[0],aPairs1[1]);
                                        }
                                    }

                                } else if (oDataOrPostBody instanceof Object) {
                                    for (var key in oDataOrPostBody) {
                                        fd.append(key,oDataOrPostBody[key]);
                                    }
                                    //strDataOrPostBody.TrimEnd('&');
                                    //strDataOrPostBody = strDataOrPostBody.substring(0, strDataOrPostBody.length - 1);
                                } else {
                                    console.log("Unavailable Parameters!");
                                    return
                                }
                                xlr.send(fd);
                            }else{*/
                            if (typeof oDataOrPostBody == "string") {
                                strDataOrPostBody = oDataOrPostBody;

                            } else if (oDataOrPostBody instanceof Object) {
                                for (var key in oDataOrPostBody) {
                                    strDataOrPostBody = strDataOrPostBody.concat(key).concat('=').concat(oDataOrPostBody[key]).concat('&');
                                }
                                //strDataOrPostBody.TrimEnd('&');
                                strDataOrPostBody = strDataOrPostBody.substring(0, strDataOrPostBody.length - 1);
                            } else {
                                oResult.businessCode = 'success';
                                oResult.description = 'Unavailable Parameters!';
                                return oResult;
                            }
                            xlr.send(strDataOrPostBody);
                            //}
                        } else {
                            xlr.send(null);
                        }

                        break;
                }
            } catch (err) {
                oScope._cLog.screenI("Network.ajax error==>" + err + "\r\n");
            }
        },


    },


    // called every frame, uncomment this function to activate update callback
    // update: function (dt) {

    // },
});