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中的的回调函数(绿色部分)并且有时候还会将某些执行结果作为参数(蓝色部分)传递给该回调函数(我回头还要调用你)。

  • 相关阅读:
    树状数组与线段树基础
    阿里云服务器低价购买及域名解析
    ENVI5.3安装教程(含软件下载)
    05 ArcGIS JS API 4.12版本监听view-change事件
    jQuery的AJAX请求成功,但是跳转到error的解决方法
    04 ArcGIS JS API 4.12加载天地图
    02 Portal for ArcGIS 10.7安装部署教程(linux环境)
    10 webpack4.0学习笔记——热替换_devServer
    09 webpack4.0学习笔记——配置文件_HtmlWebpackPlugin使用
    08 webpack4.0学习笔记——配置文件_DefinePlugin使用
  • 原文地址:https://www.cnblogs.com/itzfz/p/6159748.html
Copyright © 2011-2022 走看看