回调函数
其实就是一种传参数的思想,在多个页面的时候,我们很多时候会需要调用前一个页面的方法,这个时候就需要到这种做法
第一个页面的代码:
function allCommit(allData){
console.log(JSON.stringify(allData));
var Obj = {
url: "api/apiEmergencyController.do?checkWorkForm",
data: allData,
success: function(data) {
//关闭加载中
wlbLoadingClose();
wlbCloseWebview();
},
fail: function() {
//关闭加载中
wlbLoadingClose();
},
error: function(res) {
//关闭加载中
wlbLoadingClose();
console.log('fail');
}
};
wlbPostData(Obj);
}
第二个页面中的代码:
var allDataStr = JSON.stringify(allData);
var param ='allCommit('+allDataStr+')';
console.log(param);
wo.evalJS(param);
这里值得一提的是,evalJS对字符串的处理,一开始allData为对象,如果直接像下面这样子拼接的话是会出问题的
var param ='allCommit('+allData+')';
因为根据隐式类型转换,两者的拼接最后allData会出现类似下面的bug
又是类型转换,这都是第几次遇到这个问题了,好好反省一下吧!
前端加载时序问题
setTimeout()调试小技巧,有时候可能是时序方面出现问题,利用setTimeout()设置好时序后,如果成功,那就是证明时序有问题。
项目中的扫码页面,因为页面还没有加载完成就执行plus相关,这个时候就很容易出错。
解决这方面的问题的方法在于,判断什么时候加载完成,只能等加载完成之后才能执行相关的逻辑,否则不能执行
html5+中的barcode部分代码很好的提现了这种思想:
var ws=null,wo=null;
var scan=null,domready=false,bCancel=false;
// H5 plus事件处理
function plusReady(){
if(ws||!window.plus||!domready){
return;
}
// 获取窗口对象
ws=plus.webview.currentWebview();
wo=ws.opener();
// 开始扫描
ws.addEventListener('show',function(){
scan=new plus.barcode.Barcode('bcid',[plus.barcode.QR,plus.barcode.EAN8,plus.barcode.EAN13],{frameColor:'#00FF00',scanbarColor:'#00FF00'});
scan.onmarked=onmarked;
scan.start({conserve:true,filename:'_doc/barcode/'});
});
// 显示页面并关闭等待框
//ws.show('pop-in');
//wo.evalJS('closeWaiting()');
}
if(window.plus){
plusReady();
}else{
document.addEventListener('plusready', plusReady, false);
}
// 监听DOMContentLoaded事件
document.addEventListener('DOMContentLoaded', function(){
domready=true;
plusReady();
}, false);