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

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

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

获取公司信息的小例子

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

  1. function getList(url, paramsObj, callback) {
  2. $.ajax({
  3. type: "Post",
  4. url: url,
  5. dataType: "json",
  6. data: JSON.stringify({
  7. paramsObj: JSON.stringify(paramsObj)
  8. }),
  9. contentType: "application/json;charset-utf-8",
  10. success: function (data) {
  11. callback(data);
  12. }
  13. });
  14. }

2、后台调用数据的方法

  1. public class CompanyController : Controller
  2. {
  3. //
  4. // GET: /Company/
  5.  
  6. public ActionResult Index()
  7. {
  8. return View();
  9. }
  10.  
  11. [HttpPost]
  12. public ActionResult GetCompanyList(string paramsObj)
  13. {
  14. JavaScriptSerializer Serializer = new JavaScriptSerializer();
  15. var items = Serializer.Deserialize<Company>(paramsObj);
  16.  
  17. List<Company> list = new List<Company>();
  18. list.Add(new Company { ID = , Name = "公司一" });
  19. list.Add(new Company { ID = , Name = "公司二" });
  20. list.Add(new Company { ID = , Name = "公司三" });
  21.  
  22. return Json(list);
  23. }
  24.  
  25. }

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

  1. function buildHtml(data) {
  2. var strHtml = "";
  3. strHtml += "<table>";
  4. for (var i = 0; i < data.length; i++) {
  5. strHtml += "<tr>";
  6. strHtml += "<td>" + data[i].ID + "</td>";
  7. strHtml += "<td>" + data[i].Name + "</td>";
  8. strHtml += "</tr>";
  9. }
  10. strHtml += "</table>";
  11.  
  12. $("#divTable").html(strHtml);
  13. }
  1. function alertHtml(data) {
  2. var strHtml = "";
  3. strHtml += "<table>";
  4. for (var i = 0; i < data.length; i++) {
  5. strHtml += "<tr>";
  6. strHtml += "<td>" + data[i].ID + "</td>";
  7. strHtml += "<td>" + data[i].Name + "</td>";
  8. strHtml += "</tr>";
  9. }
  10. strHtml += "</table>";
  11.  
  12. alert(strHtml);
  13. }

4、页面调用

  1. $(document).ready(function () {
  2. //get();
  3.  
  4. var url = "/Company/GetCompanyList";
  5. var paramsObj = { ID: 3, Name: "ck" };
  6.  
  7. var com = new Company(33, "123456");
  8. com.GetCompany(url, paramsObj);
  9. });
  10.  
  11. function Company(ID,Name)
  12. {
  13. this.ID = ID;
  14. this.Name = Name;
  15. }
  16. Company.prototype.GetCompany = function (url, paramsObj) {
  17.  
  18. getList(url, paramsObj, buildHtml);
  19.  
  20. getList(url, paramsObj, alertHtml);
  21. }

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

  1. @{
  2. ViewBag.Title = "Index";
  3. }
  4. <script src="~/Scripts/jquery-1.8.2.min.js"></script>
  5.  
  6. <script type="text/javascript">
  7.  
  8. $(document).ready(function () {
  9. //get();
  10.  
  11. var url = "/Company/GetCompanyList";
  12. var paramsObj = { ID: 3, Name: "ck" };
  13.  
  14. var com = new Company(33, "123456");
  15. com.GetCompany(url, paramsObj);
  16. });
  17.  
  18. function Company(ID,Name)
  19. {
  20. this.ID = ID;
  21. this.Name = Name;
  22. }
  23. Company.prototype.GetCompany = function (url, paramsObj) {
  24.  
  25. getList(url, paramsObj, buildHtml);
  26.  
  27. getList(url, paramsObj, alertHtml);
  28. }
  29.  
  30. function getList(url, paramsObj, callback) {
  31. $.ajax({
  32. type: "Post",
  33. url: url,
  34. dataType: "json",
  35. data: JSON.stringify({
  36. paramsObj: JSON.stringify(paramsObj)
  37. }),
  38. contentType: "application/json;charset-utf-8",
  39. success: function (data) {
  40. callback(data);
  41. }
  42. });
  43. }
  44.  
  45. function buildHtml(data) {
  46. var strHtml = "";
  47. strHtml += "<table>";
  48. for (var i = 0; i < data.length; i++) {
  49. strHtml += "<tr>";
  50. strHtml += "<td>" + data[i].ID + "</td>";
  51. strHtml += "<td>" + data[i].Name + "</td>";
  52. strHtml += "</tr>";
  53. }
  54. strHtml += "</table>";
  55.  
  56. $("#divTable").html(strHtml);
  57. }
  58.  
  59. function alertHtml(data) {
  60. var strHtml = "";
  61. strHtml += "<table>";
  62. for (var i = 0; i < data.length; i++) {
  63. strHtml += "<tr>";
  64. strHtml += "<td>" + data[i].ID + "</td>";
  65. strHtml += "<td>" + data[i].Name + "</td>";
  66. strHtml += "</tr>";
  67. }
  68. strHtml += "</table>";
  69.  
  70. alert(strHtml);
  71. }
  72.  
  73. </script>
  74.  
  75. <h2>Index</h2>
  76.  
  77. <div id="divTable" style="width:500px; height:300px;">
  78.  
  79. </div>

JavaScript中回调函数的使用的更多相关文章

  1. Javascript中回调函数的学习笔记

    function a_b(kkis){ document.body.style.background ='red'; kkis(); } function fli(){ alert('######## ...

  2. Javascript之回调函数(callback)

    1.回调函数定义: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方 ...

  3. 告诉你什么是javascript的回调函数

    函数也是对象 想弄明白回调函数,首先的清楚地明白函数的规则.在javascript中,函数是比较奇怪的,但它确确实实是对象.确切地说,函数是用Function()构造函数创建的Function对象.F ...

  4. JavaScript Callback 回调函数

    JavaScript callback回调函数 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.在这 ...

  5. 深入理解JavaScript中的函数操作——《JavaScript忍者秘籍》总结

    匿名函数 对于什么是匿名函数,这里就不做过多介绍了.我们需要知道的是,对于JavaScript而言,匿名函数是一个很重要且具有逻辑性的特性.通常,匿名函数的使用情况是:创建一个供以后使用的函数.简单的 ...

  6. javascript的回调函数

    函数也是对象 想弄明白回调函数,首先的清楚地明白函数的规则.在javascript中,函数是比较奇怪的,但它确确实实是对象.确切地说,函数是用Function()构造函数创建的Function对象.F ...

  7. 如何理解JavaScript中的函数

    转: 如何理解JavaScript中的函数 JS中的函数简介 JS中的函数是一种通过调用来完成具体业务的一段代码块.最核心的目的是将可重复执行的操作进行封装,然后供调用方无限制的调用. JS中的函数的 ...

  8. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  9. $.getJSON('url',function(data){}) 中回调函数不执行

    $.getJSON('url',function(data){}) 中回调函数不执行 url 中的 json 格式不正确 ,浏览器返回并没有报错 {'湖北':[114.11438,30.849429] ...

随机推荐

  1. System.Web.UI.ScriptManager.RegisterStartupScript(语句末尾加分号,不然可能会造成语句不执行)

    System.Web.UI.ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "testKey", &q ...

  2. Zuoye for guo

      A  B  C  D  E  A  -  3  6  10  13  B  -  -  5  9  12  C  -  -  -  10  13  D  -  -  -  -  9  E  -  ...

  3. UVa 272 Tex Quotes --- 水题

    题目大意:在TeX中,左引号是 ``,右引号是 ''.输入一篇包含双引号的文章,你的任务是把他转成TeX的格式 解题思路:水题,定义一个变量标记是左引号还是右引号即可 /* UVa 272 Tex Q ...

  4. URAL 1205 By the Underground or by Foot?(SPFA)

    By the Underground or by Foot? Time limit: 1.0 secondMemory limit: 64 MB Imagine yourself in a big c ...

  5. 课堂所讲整理:包装&工具类

    package org.hanqi.array; import java.util.Random; public class BaoZhuang { public static void main(S ...

  6. HTML文件结构

    转载(http://jingyan.baidu.com/article/75ab0bcbf04a75d6864db2fd.html) HTML文件结构 HTML文件均以<html>标记开始 ...

  7. /bin/rm: Argument list too long解決方法

    rm.cp.mv是unix下面常用到的檔案處理指令,當我們需要刪除大量的log檔案,如果檔案數太多就會出現此訊息[/bin/rm: Argument list too long]解決方式如下: 例如要 ...

  8. 锁_rac环境kill锁表会话后出现killed状态(解决)

    原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46876961 ra ...

  9. Avoiding PostgreSQL database corruption

    TL;DR: Don't ever set fsync=off, don't kill -9 the postmaster then deletepostmaster.pid, don't run P ...

  10. UIPageControl简单使用

    1.添加一个UIPageControl到view中 -(void)addPageControl { UIPageControl* page=[[UIPageControl alloc]init]; p ...