企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# ajax(对ajax函数封装) ## 一:使用方法 之前用 `fnList(ret)` ,现在改为 `fnList(ret.data.info)` ## 二:示例 ![](https://box.kancloud.cn/53fdaf18b5ca0e8f44e470bd5ee37b5f_1093x539.png) ``` //ajax获取文章分类 function Terms_list() { ajax({ url: domainName + '/index.php?g=App&m=Article&a=articleTerms', method: 'get' }, function(ret, err) { if (ret) { fnList_terms(ret.data.info); //新的 //fnList_terms(ret); //旧的 } else { api.toast({ msg: '网络错误'+'网络请求:'+err.statusCode+'错误码:'+err.code, duration: 2000, location: 'middle' }); } }); } ``` ## 三:函数源码 ```js /** * [ajax 封装api.ajax加入自定义HTTP请求头,以实现APP身份验证和模拟SESSION机制] * 使用方法与api.ajax完全一样 * @author Baiyu * @param {[object]} parmas [参数对象] * @param {[function]} callback [回调函数] */ function ajax(params, callback){ if(!api){ console.log('只能运行在APICLOUD环境下'); return false; } //返回所有http响应头信息 var needReturnAll = false; if (params.returnAll) { //调用者需要返回所有结果 needReturnAll = true; } else { //调用者不需要返回所有结果但系统需要 params.returnAll = true; } //请求头加入APP身份识别码 if (!params.headers) { params.headers = {}; } params.headers.NEWAPPAUTH = api.getPrefs({ sync : true, key : 'NEWAPPAUTH' }); //请求头加入模拟SESSID var newSessId = api.getPrefs({ sync : true, key : 'NEWSESSID' }); if (newSessId) { params.headers.NEWSESSID = newSessId; } //发起ajax请求 api.ajax(params, function(ret, err){ //未出错时处理response中的Set-Cookie,截取并保存到Prefs if (!err) { var headers = ret.headers; var statusCode = ret.statusCode; if (headers['Set-Cookie']) { var sessionArr = headers['Set-Cookie'].match(/NEWSESSID=[\w\d]+/g); for(var i in sessionArr){ var data = sessionArr[i].split('='); var sessionId = $api.trim(data[1]); api.removePrefs({ key : 'NEWSESSID' }); if (sessionId != 'deleted') { api.setPrefs({ key : 'NEWSESSID', value : sessionId }); } } } //如果服务器返回201错误代码,表明需要重新登录,这里发送重新登录事件,index.html中会接收到并处理 if (ret.error == 201) { api.removePrefs({ key : 'NEWSESSID' }); api.sendEvent({ name: 'reLogin' }); return false; } } var ret = !needReturnAll && !err ? ret.body : ret; //根据调用者是否需要返回所有结果来确定要返回ret还是ret.body callback.apply(this, [ret, err]); }); } ```