zoukankan      html  css  js  c++  java
  • 回调函数的使用

    对JavaScript不太清楚,这次知道了回调函数的使用,记录一下。

    简单来说,就是把回调方法作为一个参数,传递给另一个方法,然后在那个方法里面执行完一定操作,调用那个方法。这样就实现了回调。

    例如:

    需要被回调的方法:

    function callback(a)
    {
        console.log('回调函数结果:'+a);
    
    }

    把该回调方法传入另一个方法,在该方法里面调用该回调方法。

    function  invokeMethod(params,callback)
    {
        console.log('接下来就要执行回调方法了');
        callback(params);
    }

    最后:执行invokeMethod的时候,传入回调方法和相应参数,就能实现效果。

    invokeMethod('测试回调方法',callback)

    效果:

    起始上一节里面的Ajax封装就是如此,把回调方法作为参数传入Ajax调用方法,Ajax在获取完数据后,在Ajax方法里面间接调用了回调方法。

    Ajax执行方法:

    function createXMLRequst(){
        try{
            return new XMLHttpRequest();
        }catch(e)
        {
            try{
                return new ActiveXObject("Msxml2.XMLHTTP");
            }catch(e){
                try{
                    return new ActiveXObject("Microsoft.XMLHTTP");
                }catch(e){
                    alert("不支持浏览器版本");
                    throw e;
                }
            }
        }
    }
    function ajax(option)
    {
        var xmlHttp=createXMLRequst();
        //打开链接
        if(!option.method)//默认get
        {
            option.method="GET";
        }
        if(option.asyn==null)//默认为异步处理
        {
            option.asyn=true;
        }
        
        xmlHttp.open(option.method,option.url,option.asyn);
        
        //POST需要设置请求头
        if(option.method=="POST")
        {
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        }
        //发送请求,加上请求参数
        xmlHttp.send(option.params);
        //给异步对象的onreadystatechange事件注册监听器
        xmlHttp.onreadystatechange=function()
        {
            //双重判断,判断是否为4的状态,并且响应状态码为:200
            if(xmlHttp.readyState==4 && xmlHttp.status==200)
            {
                var data;
                if(!option.type){
                    data=xmlHttp.responseText;
                }else if(option.type=="xml"){
                    data=xmlHttp.responseXML;
                }else if(option.type=="text"){
                    data=xmlHttp.responseText;
                }else if(option.type=="json"){
                    var text=xmlHttp.responseText;
                    data=eval("("+text+")");
                }
                //调用回调函数
             option.callback(data);
            }
        }
    }

    执行Ajax方法时候,把回调方法做参数传入:

        btn.onclick=function(){
            ajax(
                {
                    url:"/AjaxDemo/JsonAjax",
                    type:"json",
                    callback:function(data){
                        document.getElementById("h3").innerHTML=data.name+","+data.age+","+data.sex;
                    }
                }
            );
        }

    如此就实现了回调。

  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/alsf/p/9314289.html
Copyright © 2011-2022 走看看