美文网首页
2018-06-18

2018-06-18

作者: 手中的风信子 | 来源:发表于2018-06-20 23:41 被阅读19次

    Ajax

    1.App与服务器间的交互

    交互.png

    2.JSON

    语法规则:
    数据在键值对中
    数据由逗号隔开
    花括号保存对象
    方括号保存数组

    {"name":"小明","age":18,"friends":[{"name":"小刚","age":19}]}
    

    3.使用MUI提供的Ajax工具完成与服务器端的交互

    mui框架基于htm5plus的XMLHttpRequest,封装了常用的Ajax函数,支持GET、POST请求方式,支持返回json、xml、html、text、script数据类型;

    最常用的mui.get()、mui.getJSON()、mui.post()三个方法

    4.mui.ajax()

    
    mui.ajax({
                    url: "http://124.74.245.110:8088/Product/MenuList",
                    type: "GET",
                    success: function (msg) {
                        mui.toast(msg);
                    },
                    error: function (xhr,type,errorThrown) {
                        mui.toast(type);
                    }
                })
    

    参数:

    url               Type:   String 请求发送的目标地址
    async          Type:   bool  发送同步请求
    data            (xx:xx,xxx:xxx)  请求参数
    dataType    "xml":返回xml格式;"json",返回json格式;"text":返回纯文本格式
    error:          请求失败时触发的回调函数xhr:xhr实例子对象,type:错误信息,errorThrown:可捕获的异常对象)
    
    success          请求成功时的回调函数(data:返回的数据对象,可以是json,也可以是text等)
    
    timeout          请求的超时时间
    
    type             HTTP的请求方式,目前仅支持‘GET’和‘POST’
    
    headers          请求头{'Content-Type':'application/json'}
    
    

    完整代码:

    document.getElementById("bt2").addEventListener("tap", function() {
                    mui.ajax('http://118.242.19.148:8688/APPpubpay/JiaofeiController/checkCompany',{
                        data:{
                            type:"2"
                        },
                        headers:{'Content-Type':'application/json'},    
                        dataType:'json',//服务器返回json格式数据
                        type:'post',//HTTP请求类型
                        timeout:10000,//超时时间设置为10秒;
                        success:function(data){
                            console.log(JSON.stringify(data)); //对象转文本
                            mui.toast(data.code);
                        },
                        error:function(xhr,type,errorThrown){
                            mui.toast(type);
                        }
                    });
                })
            })
    
    

    5. Ajax简化模式

    mui.post()方法是对mui.ajax()的一个简化方法,直接使用POST请求方式向服务器发送数据、且不处理timeout和异常
    使用方法: mui.post(url[,data][,success][,dataType])

    //简化post
            document.getElementById("bt3").addEventListener("tap",function () {
                mui.post('http://120.79.223.200:8080/commons/checkVersion',{
                        params: JSON.stringify( {clientType:"1"} )
                    },function(data){
                        console.log(JSON.stringify(data)); //对象转文本
                            mui.toast(data.code);
                    },'json'
                );
            })
            
            //简化get
            document.getElementById("bt4").addEventListener('tap',function () {
                mui.get('http://124.74.245.110:8088/Product/MenuList',{
                        //参数
                },function(data){
                    console.log(JSON.stringify(data)); //对象转文本
                        mui.toast(data);
                    },'json'
                );
            })
    
    

    6.上拉刷新下拉加载的启用禁止方法

    mui('#pullrefresh').pullRefresh().setStopped(true); //暂时禁止滚动
    mui('#pullrefresh').pullRefresh().setStopped(false); //取消暂时禁止滚动
    
    mui('#pullrefresh').pullRefresh().disablePullupToRefresh();//禁用上拉加载
    mui('#pullrefresh').pullRefresh().enablePullupToRefresh();//启用上拉加载
    

    7.安卓双webview下拉刷新,子webview包含picker插件,picker插件下滑失效的处理办法。

    mui('.mui-table-view').on('tap','li',function(){
        var dtpicker = new mui.DtPicker({
          "type": "time",
            "customData": {
              "h": [
               {
                  value: "am",
                  text: "上午"
               }, {
                  value: "pm",
                  text: "下午"
               }, 
            ]
         }
        })
        dtpicker.show(function(e) {
            console.log(e);
        })  
        // 暂时禁止滚动
        mui('#pullrefresh').pullRefresh().setStopped(true);
    })  
    
    mui('body').on('tap','.mui-backdrop',function(){
        // 取消暂时禁止滚动
        mui('#pullrefresh').pullRefresh().setStopped(false);
    })
    mui('body').on('tap','.mui-dtpicker-header',function(e){
        var target = e.target;
        if(target.tagName === 'BUTTON'){
            // 取消暂时禁止滚动
            mui('#pullrefresh').pullRefresh().setStopped(false); 
        }   
    })
    

    8.获取APP系统权限和打开权限设置

    1.获取APP系统权限:

    var main = plus.android.runtimeMainActivity();
    // 注意修改包名
    var packageName = "io.dcloud.HBuilder";
    var pm = main.getPackageManager();
    var PackageManager = plus.android.importClass(pm);
    
    // 获取当前应用所有权限
    var pi = pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
    var permissions = plus.android.getAttribute(pi,"requestedPermissions");
    if(permissions != null){
        console.log("permissions:"+JSON.stringify(permissions));
    }
    // 判断应用是否存在某个权限
    // 录音权限:android.permission.RECORD_AUDIO
    // 相机权限:android.permission.CAMERA
    var permission = (PackageManager.PERMISSION_GRANTED ==  
    pm.checkPermission("android.permission.CAMERA", packageName));  
    if (permission) {
        plus.nativeUI.toast("有录音权限");  
    }else {  
        plus.nativeUI.toast("没有录音权限");  
    } 
    

    2.打开权限设置:

    var main = plus.android.runtimeMainActivity();
    // 注意修改包名
    var packageName = "io.dcloud.HBuilder";
    var Uri = plus.android.importClass("android.net.Uri");
    var Settings = plus.android.importClass("android.provider.Settings");
    var packageURI = Uri.parse("package:" + packageName);
    var intent = plus.android.newObject("android.content.Intent", Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
    main.startActivity(intent);
    

    3.当权限被禁止时,android 6.0以下需要通过异常进行判断:

    <div class="mui-content mui-content-padded">
        <button id="btn1" type="button" class="mui-btn mui-btn-blue mui-btn-block">判断权限是否存在</button>
        <button id="btn2" type="button" class="mui-btn mui-btn-blue mui-btn-block">打开权限设置</button>
    </div>
    
    <script src="js/mui.min.js"></script>
    <script type="text/javascript">
        var r = null;
        mui.plusReady(function () {
            
            document.querySelector('#btn1').addEventListener('tap',function () {
                r = plus.audio.getRecorder();
                r.record({
                    filename:"_doc/audio/"
                }, function () {
                    mui.toast("Audio record success!");
                }, function (e) {
                    console.log(JSON.stringify(e));
                    if(e.code === 3){
                        mui.toast("Audio无权限,请先去设置!");
                        openSetting();
                    }   
                });
            })
    
            /*打开权限设置页面*/
            function openSetting () {
                // 注意修改包名
                var packageName = "io.dcloud.HBuilder";
                var main = plus.android.runtimeMainActivity();
                var Uri = plus.android.importClass("android.net.Uri");
                var Settings = plus.android.importClass("android.provider.Settings");
                var packageURI = Uri.parse("package:" + packageName);
                var intent = plus.android.newObject("android.content.Intent", Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
                main.startActivity(intent);
            }
        
            // 打开权限设置
            document.querySelector('#btn2').addEventListener('tap',function () {
                openSetting();
            })
        })
    </script>
    

    4.从5+ webview跳转到android原生Activity

    var main = plus.android.runtimeMainActivity();
    var Intent = plus.android.importClass("android.content.Intent");
    var intent = new Intent(main.getIntent());
    intent.setClassName(main, "io.dcloud.Test");
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    // 传值
    // intent.putExtra("extra", "这是页面传来的值!");
    main.startActivity(intent);
    注意:"io.dcloud.Test“这里是需要跳转的Activity.
    

    这里需要特别注意的是需要设置这个:

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    

    5.从android原生Activity跳转到5+ webview

    Button btn = (Button)findViewById(R.id.btnShow);
    btn.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v){
            Intent intent = new Intent();
            intent.setComponent(new ComponentName("io.dcloud.HBuilder", "io.dcloud.PandoraEntry"));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            getApplicationContext().startActivity(intent);
        }
    });
    
    

    [图片上传失败...(image-d77efc-1529509263719)]

    相关文章

      网友评论

          本文标题:2018-06-18

          本文链接:https://www.haomeiwen.com/subject/hakfyftx.html