多次连续调用ajax
Posted yaoya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多次连续调用ajax相关的知识,希望对你有一定的参考价值。
项目上遇见这个问题,因为接口每次调用的参数都不同,所以我第一反应是用循环来做。前面代码写的乱七八糟,把所有的接口调用写在一个函数里面,包括要用到的参数都写在一起,真的是很多问题,所以代码的整洁性真的很重要。
因为接口调用是有顺序的,比如我先调用1接口,1成功以后才能调用2接口,2调用成功又调用1接口,如此循环往复。用循环做不行,因为ajax都是异步操作的。最好是在确定一个接口调取成功以后再调用另一个接口。所以我换了一种解决方法就是回调。我把1,2接口是分别写在两个函数里面,我在调用1接口返回成功以后再调用2接口,同时我定义了一个全局变量,用来记录调用1再调用2这样一个过程的次数,这样一个过程结束变量就加一。再在2接口返回成功的函数里面调用1接口,这样循环做
//触发函数
function proProSubmit(){ if( !confirm("确定提交?")){return;} if(gongdanwuliao ==""){ appcan.window.openToast(‘工单在制品料号缺失!‘,3000,5,0); return; } if(wuliaoliaohao==""){ appcan.window.openToast(‘工单在制品料号缺失!‘,3000,5,0); return; } if( barcodeArrNow.length === 0){ appcan.window.openToast(‘当前没有可提交数据!‘,3000,5,0); return; }; dataRefresh(); touliaoFunction(); }
//加工投料的数据 function dataRefresh(){ var json = {}; var newNum = {}; Djson = []; if(BarcodeType=="容器"){ json = { InstanceGuid:MATERIALGUID,//物料实例、容器实例的guid InstanceType:"容器",//容器,物料 ,包装 Amount:parseInt(hegeCount),//数量 //HandleType:list[index].BarcodeType,//混合实例输入处理类型 MixNormList:newNum, }; }else{ json = { InstanceGuid:MATERIALGUID,//物料实例、容器实例的guid InstanceType:"物料",//容器,物料 ,包装 Amount:parseInt(hegeCount),//数量 //HandleType:list[index].BarcodeType,//混合实例输入处理类型 MixNormList:newNum, }; } Djson.push(json); } //1接口 function touliaoFunction(){ SUBJSON = {}; var inputJson = {}; var dataArr = []; InputMaterias = []; dataArr.push(InputListBill[ajaxFlag]); inputJson = { "InputListBill":dataArr, "InputListOfCreateMixInstance":Djson, "WorkLocationInstanceGuid":null }; InputMaterias.push(inputJson); console.log(deviceJD); SUBJSON = { OpType:"新加工投料采集", flag:6, PutType:"新投料", WorkLocationGuid:LOGIN.StationID,//工位静态信息guid---- DeviceGuid:deviceJD.RecordID,//设备的GUID------ WorkProccessId:gongxuArr[ajaxFlag].processID,//工序唯一ID------ ProcessingSort:gongxuArr[ajaxFlag].processSort, ProductMaterialId : numberValue, BillNumber:workOrderxinxi.工单单号, BillType:workOrderxinxi.工单单别, InputMaterias:InputMaterias, //WorkLocationInstanceGuid:StationInstanceGuid, //InputListOfCreateMixInstance:Djson, LogicType: "工位管理", EventName:"加工投料", //事件名称 OperatorId:LOGIN.UserID, //操作人ID OperatorName:LOGIN.U_LoginName, //操作人名称 WorkLocId:LOGIN.StationID,//工位ID Version: versionControl.versionNum, WorkCenterCode:(appcan.locStorage.val("WORK_CENTER_CODE")?appcan.locStorage.val("WORK_CENTER_CODE"):""), LoginUserID:LOGIN.UserID//操作人ID----- }; console.log(SUBJSON); if(ajaxFlag==0){ addLoading(); } appcan.request.ajax({ url:AjaxURL+"?date=("+new Date().getTime()+")", type:"POST",timeout:500000, data:{ input:SUBJSON }, dataType:"json", success : function( info ) { console.log(info); // //关闭提交阻碍层 if(info.bSuccess){ console.log("ok") chanchuFunction(); }else{ delLoading(); appcan.window.openToast(info.Error,3000,5,0); } if( !info.isNewVersion ){ //直接跳转到登陆页 appcan.window.open({ name: ‘login‘, data:‘../login/login.html‘, }); } }, error: function(){ // //关闭提交阻碍层 delLoading(); appcan.window.openToast("网络错误!",3000,5,0); } }); } //2接口 function chanchuFunction(){ submintInfo = {}; var outArr = []; outArr.push(barcodeArrNow[ajaxFlag]); submintInfo = { WorkLocationInstanceGuid:(stationInJD?stationInJD.GUID:""), WorkProccessId:gongxuArr[ajaxFlag].processID, ProcessingSort:gongxuArr[ajaxFlag].processSort, ReceiveUserID:receiveID, ReceiveUserName:receiveName, AssistUserID:(AssistUserID?AssistUserID:null),// AssistUserName:(AssistUserName?AssistUserName:null),// AlibraryBarcode:wareHouseJD.AlibraryBarcode, AlibraryID:wareHouseJD.AlibraryID, AlibraryName:wareHouseJD.AlibraryName, AlibraryNumber:wareHouseJD.AlibraryNumber, OpType:"新产出", DeviceGuid:deviceBianhao, BillNumber:workOrderxinxi.工单单号, BillType:workOrderxinxi.工单单别, LogicType:"工位管理", EventName:"加工产出采集", //事件名称 OperatorId:LOGIN.UserID, //操作人ID OperatorName:LOGIN.U_LoginName, //操作人名称 WorkLocId:LOGIN.StationID,//工位ID Version: versionControl.versionNum, WorkCenterCode:(appcan.locStorage.val("WORK_CENTER_CODE")?appcan.locStorage.val("WORK_CENTER_CODE"):""), lstProduct : outArr }; console.log("ueksf"); //setTimeout(function(){ console.log(submintInfo); appcan.ajax({ url:AjaxURL+"?date=("+new Date().getTime()+")", type:"POST",timeout:500000, data:{ input:submintInfo }, dataType:"json", success:function(info){ console.dir(info); //关闭提交阻碍层 if(info.bSuccess){ console.log("yes"); if(ajaxFlag<gongxuArr.length-1){ ajaxFlag++; MATERIALGUID = info.lstMaterialBarcode[0].GUID; dataRefresh(); touliaoFunction(); }else{ delLoading(); appcan.window.evaluateScript({ name:‘mergeWorks‘, scriptContent:"reload()" }); } //stationAjax(LOGIN.StationID); }else{ delLoading(); appcan.window.openToast(info.Error,3000,5,0); } }, error:function(e){ //appcan.window.closeToast(); //关闭提交阻碍层 console.log(1) delLoading(); appcan.window.openToast(‘系统请求错误!‘,3000,5,0); } }); //},2000); }
下去,直到索引达到临界值。
以上是关于多次连续调用ajax的主要内容,如果未能解决你的问题,请参考以下文章
对 glDrawElements 的多次调用是不是比在 GLSL 中对每个片段执行相同的计算更有效?