項目上遇見這個問題,因為接口每次調用的參數都不同,所以我第一反應是用循環來做。前面代碼寫的亂七八糟,把所有的接口調用寫在一個函數里面,包括要用到的參數都寫在一起,真的是很多問題,所以代碼的整潔性真的很重要。
因為接口調用是有順序的,比如我先調用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); }
下去,直到索引達到臨界值。