zoukankan      html  css  js  c++  java
  • 回调函数理解

    今天在封装ajax的时候遇到了回调函数,好好的思考了一番,结果如下:

    封装后的ajax.js文件中的代码片段如下

    • function ajax(method, url, data, success) {
    • var xhr = null;
    • try {
    • xhr = new XMLHttpRequest();
    • } catch (e) {
    • xhr = new ActiveXObject('Microsoft.XMLHTTP');
    • }
    • if (method == 'get' && data) {
    • url += '?' + data;
    • }
    • xhr.open(method,url,true);
    • if (method == 'get') {
    • xhr.send();
    • } else {
    • xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
    • xhr.send(data);
    • }
    • xhr.onreadystatechange = function() {
    • if ( xhr.readyState == 4 ) {
    • if ( xhr.status == 200 ) {
    • success && success(xhr.responseText);
    • } else {
    • alert('出错了,Err:' + xhr.status);
    • }
    • }
    • }
    • }

    而在另一个需要调用ajax.js的html文件中的代码片段如下

    • <head>
    • <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    • <title>无标题文档</title>
    • <script src="ajax.js"></script>
    • <script>
    • window.onload = function() {
    • var oBtn = document.getElementById('btn');
    • oBtn.onclick = function() {
    • /*ajax({
    • url : 'getNews.php',
    • success : function(data) {
    • //...
    • }
    • });*/
    • ajax('get','getNews.php','',function(data) {
    • var data = JSON.parse( data );
    • var oUl = document.getElementById('ul1');
    • var html = '';
    • for (var i=0; i<data.length; i++) {
    • html += '<li><a href="">'+data[i].title+'</a> [<span>'+data[i].date+'</span>]</li>';
    • }
    • oUl.innerHTML = html;
    • });
    • }
    • }
    • </script>
    • </head>
    • <body>
    • <input type="button" value="按钮" id="btn" />
    • <ul id="ul1"></ul>
    • </body>

    分析:

    红色部分调用了ajax()函数,先分析ajax函数,其中参数列表里的success就是回调函数,当此函数执行到某一步骤之后就会判断success函数是否存在,换句话说success本身而言是一个形参,而真正要执行的应该是调用该函数时传递进来的函数,在这里是一个html文件中的匿名函数(绿色部分)。用一句话来说,即你先调用我,我回头还要调用你,在这里html文件先调用了ajax()函数并且将要处理的逻辑代码封装成了匿名函数作为回调函数传递给了ajax(),那么就会先执行ajax()函数(html先调用了ajax()函数),当ajax()函数执行到某一阶段(一般是在函数的结尾)ajax()函数就会去调用html中的的回调函数(绿色部分)并且有时候还会将某些执行结果作为参数(蓝色部分)传递给该回调函数(我回头还要调用你)。

  • 相关阅读:
    hashMap put的返回值测试
    mysql java 类型对照 int
    crontab
    Caused by: java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as return type!
    Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
    Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext
    蒙特卡罗算法:模拟
    Linux学习笔记:cut命令
    Linux学习笔记:split切分文件并按规律命名及添加拓展名
    Shell学习笔记:awk实现group by分组统计功能
  • 原文地址:https://www.cnblogs.com/itzfz/p/6159748.html
Copyright © 2011-2022 走看看