• JavaScript中回调函数的使用


    在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。

    在实际应用中,可以这么应用,一个方法进行获取数据源,另一个方法(回调函数)可以通过数据源在页面上进行展示,可以根据具体的需求进行展示就行,如果多个地方用到这个数据源,可以写不同的回调函数,将此函数传入这个方法中即可。

    来,咱们通过实例可以一目了然

    获取公司信息的小例子

    1、获取公司信息数据源的方法(参数 url 为访问的地址,paramsObj为传递的参数对象,callback 为回调函数)

    function getList(url, paramsObj, callback) {
            $.ajax({
                type: "Post",
                url: url,
                dataType: "json",
                data: JSON.stringify({
                    paramsObj: JSON.stringify(paramsObj)
                }),
                contentType: "application/json;charset-utf-8",
                success: function (data) {
                    callback(data);
                }
            });
        }

    2、后台调用数据的方法

    public class CompanyController : Controller
        {
            //
            // GET: /Company/
    
            public ActionResult Index()
            {
                return View();
            }
    
            [HttpPost]
            public ActionResult GetCompanyList(string paramsObj)
            {
                JavaScriptSerializer Serializer = new JavaScriptSerializer();
                var items = Serializer.Deserialize<Company>(paramsObj);
    
                List<Company> list = new List<Company>();
                list.Add(new Company { ID = 1, Name = "公司一" });
                list.Add(new Company { ID = 2, Name = "公司二" });
                list.Add(new Company { ID = 3, Name = "公司三" });
    
                return Json(list);
            }
    
        }
    View Code

    3、回调函数的方法,这里写了两个可以作为回调函数(一个用于将table展示到页面上,另一个以弹出框的形式展现)

    function buildHtml(data) {
            var strHtml = "";
            strHtml += "<table>";
            for (var i = 0; i < data.length; i++) {
                strHtml += "<tr>";
                strHtml += "<td>" + data[i].ID + "</td>";
                strHtml += "<td>" + data[i].Name + "</td>";
                strHtml += "</tr>";
            }
            strHtml += "</table>";
    
            $("#divTable").html(strHtml);
        }
    function alertHtml(data) {
            var strHtml = "";
            strHtml += "<table>";
            for (var i = 0; i < data.length; i++) {
                strHtml += "<tr>";
                strHtml += "<td>" + data[i].ID + "</td>";
                strHtml += "<td>" + data[i].Name + "</td>";
                strHtml += "</tr>";
            }
            strHtml += "</table>";
    
            alert(strHtml);
        }

    4、页面调用

    $(document).ready(function () {
            //get();
    
            var url = "/Company/GetCompanyList";
            var paramsObj = { ID: 3, Name: "ck" };
    
            var com = new Company(33, "123456");
            com.GetCompany(url, paramsObj);
        });
    
        function Company(ID,Name)
        {
            this.ID = ID;
            this.Name = Name;
        }
        Company.prototype.GetCompany = function (url, paramsObj) {
            
            getList(url, paramsObj, buildHtml);
    
            getList(url, paramsObj, alertHtml);
        }
    View Code

    最后整理一下,页面全部代码如下:

    @{
        ViewBag.Title = "Index";
    }
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    
    <script type="text/javascript">
    
        $(document).ready(function () {
            //get();
    
            var url = "/Company/GetCompanyList";
            var paramsObj = { ID: 3, Name: "ck" };
    
            var com = new Company(33, "123456");
            com.GetCompany(url, paramsObj);
        });
    
        function Company(ID,Name)
        {
            this.ID = ID;
            this.Name = Name;
        }
        Company.prototype.GetCompany = function (url, paramsObj) {
            
            getList(url, paramsObj, buildHtml);
    
            getList(url, paramsObj, alertHtml);
        }
    
        
    
        function getList(url, paramsObj, callback) {
            $.ajax({
                type: "Post",
                url: url,
                dataType: "json",
                data: JSON.stringify({
                    paramsObj: JSON.stringify(paramsObj)
                }),
                contentType: "application/json;charset-utf-8",
                success: function (data) {
                    callback(data);
                }
            });
        }
    
        function buildHtml(data) {
            var strHtml = "";
            strHtml += "<table>";
            for (var i = 0; i < data.length; i++) {
                strHtml += "<tr>";
                strHtml += "<td>" + data[i].ID + "</td>";
                strHtml += "<td>" + data[i].Name + "</td>";
                strHtml += "</tr>";
            }
            strHtml += "</table>";
    
            $("#divTable").html(strHtml);
        }
    
        function alertHtml(data) {
            var strHtml = "";
            strHtml += "<table>";
            for (var i = 0; i < data.length; i++) {
                strHtml += "<tr>";
                strHtml += "<td>" + data[i].ID + "</td>";
                strHtml += "<td>" + data[i].Name + "</td>";
                strHtml += "</tr>";
            }
            strHtml += "</table>";
    
            alert(strHtml);
        }
        
    </script>
    
    <h2>Index</h2>
    
    <div id="divTable" style="500px; height:300px;">
    
    </div>
    View Code
  • 相关阅读:
    找到排序矩阵中从小到大第K个数字
    使用VSCODE开发UE4
    UE4添加模块
    游戏串流
    DIY Arduino 方向盘
    免费/开源软件推荐
    把引擎插件变成工程插件
    MergeActors技巧
    烘焙卡在99%
    UMG里没有"Prefab"怎么办?
  • 原文地址:https://www.cnblogs.com/ck168/p/5462882.html
Copyright © 2020-2023  润新知