项目上遇见这个问题,因为接口每次调用的参数都不同,所以我第一反应是用循环来做。前面代码写的乱七八糟,把所有的接口调用写在一个函数里面,包括要用到的参数都写在一起,真的是很多问题,所以代码的整洁性真的很重要。
因为接口调用是有顺序的,比如我先调用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
原文地址:http://www.cnblogs.com/yaoya/p/7649908.html