笔记练习:《Javascript入门经典(第5版)》page202_16.11Practice

本文介绍如何使用JavaScript的定时器函数修改时钟示例代码,使其能够自动更新显示时间,并计算与服务器时间的时差。

利用本章及签名章节介绍的知识,修改时钟返利的代码,让时钟间隔一定时间自动更新。(提示:使用定时器,比如 setInterval() 或 setTimeout()。)

修改时钟范例的脚本,显示服务器时间与本地时间之间的时差。

 HTML 文件 代码内容如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Ajax Clock</title>
    <style>
        #clock{
            font: 32px normal verdana,helvetica,sans-serif;
        }
    </style>
    <script src="ajax.js"></script>
    <script>
        //添加 callAjax()函数附加到按钮onclick事件处理器
        window.onload = function(){
            document.getElementById("btn1").onclick = callAjax;
        }
    </script>
</head>
<body>
    <input id="btn1" type="button" value="Get Time" />
    <br/>
    <div id="clock"></div>
</body>
</html>



JS 文件 代码内容如下:

//跨浏览器创建 XMLHttpRequest 对象
function getXMLHttpRequest(){
    try{
        try{
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e){
            return new ActiveXObject("Msxml2.XMLHTTP");
        }
    }
    catch(e){
        return new XMLHttpRequest();
    }
}
//发送服务器请求
function callAjax(){
    var url = "clock.php";
    var myRandom = parseInt(Math.random() * 99999999);
    myRequest.open("GET",url + "?rand=" + myRandom,true);
    myRequest.onreadystatechange = responseAjax;
    myRequest.send(null);
}
//设置回调函数,判断服务器状态,返回执行语句
function responseAjax(){
    if(myRequest.readyState == 4){
        if(myRequest.status == 200){
            var now = new Date();
            var localTime = now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
            var serverTime = myRequest.responseText;
            document.getElementById("clock").innerHTML = "Server:" + serverTime +"<br/>" + "Local:" + localTime +  "<br />时差:" + Math.abs(parseInt(serverTime)-parseInt(localTime));
            //设置定时器,每隔1秒的时间调用;
            setTimeout('callAjax()',500);
        }else{
            alert("An error has occurred:" + myRequest.statusText);
        }
    }
}

//创建 XMLHttpRequest 实例
var myRequest = getXMLHttpRequest();





测试并实现结果如图:


--- - name: 部署Zabbix Agent (CentOS7) hosts: all become: yes become_user: root become_method: sudo vars: zabbix_version: "6.2.9" zabbix_server_ip: "{{ zabbix_server | default('192.168.16.40') }}" zabbix_agent_port: "10050" # 敏感信息建议用ansible-vault加密存储 monitor_user: "monitor" monitor_password: "123456" # 生产环境需用ansible-vault加密 zabbix_install_prefix: "/usr/local/zabbix" # 使用相对路径,符合Ansible文件结构规范 local_zabbix_source: "/zabbix/zabbix-{{ zabbix_version }}.tar.gz" zabbix_agent_template: "/zabbix/zabbix_agentd.conf.j2" zabbix_init_script: "/zabbix/zabbix_agentd" tasks: # 1. 系统准备 - name: 安装基础仓库和工具 yum: name: - epel-release - yum-utils - wget state: present update_cache: yes - name: 启用必要系统仓库 command: yum-config-manager --enable base updates extras changed_when: false # 2. 创建管理用户 - name: 创建monitor用户 user: name: "{{ monitor_user }}" password: "{{ monitor_password | password_hash('sha512') }}" # 密码哈希化 shell: /bin/bash create_home: yes state: present groups: wheel # 加入wheel组便于 append: yes # 3. 安装依赖包(解决包依赖问题) - name: 安装编译和运行依赖 yum: name: # 系统工具 - gcc - make - automake - libtool # Zabbix依赖 - net-snmp - net-snmp-devel - curl-devel - java-1.8.0-openjdk - java-1.8.0-openjdk-devel - libevent - libevent-devel - mysql-devel # 硬件监控相关(通过EPEL仓库获取) - libssh2-devel state: present update_cache: yes register: yum_result retries: 3 delay: 5 until: yum_result is succeeded # 失败重试机制 # 4. 创建Zabbix运行用户 - name: 创建zabbix系统用户 user: name: zabbix shell: /sbin/nologin system: yes state: present create_home: no # 5. 上传并处理安装包 - name: 检查本地安装包是否存在 delegate_to: 192.168.16.11 stat: path: "{{ local_zabbix_source }}" register: zabbix_package failed_when: not zabbix_package.stat.exists # 本地包不存在则失败 - name: 上传Zabbix安装包 copy: src: "{{ local_zabbix_source }}" dest: "/zabbix/zabbix-{{ zabbix_version }}.tar.gz" owner: "{{ monitor_user }}" group: "{{ monitor_user }}" mode: '0644' vars: ansible_user: "{{ monitor_user }}" ansible_password: "{{ monitor_password }}" - name: 解压Zabbix源码 unarchive: src: "/tmp/zabbix-{{ zabbix_version }}.tar.gz" dest: "/usr/local/src/" remote_src: yes owner: root group: root creates: "/usr/local/src/zabbix-{{ zabbix_version }}" # 已存在则跳过 # 6. 编译安装 - name: 配置编译环境 shell: | export CFLAGS="-std=gnu99" ./configure --prefix={{ zabbix_install_prefix }} --enable-agent args: chdir: "/usr/local/src/zabbix-{{ zabbix_version }}" creates: "/usr/local/src/zabbix-{{ zabbix_version }}/Makefile" # 避免重复配置 - name: 编译安装Zabbix Agent make: chdir: "/usr/local/src/zabbix-{{ zabbix_version }}/" target: install register: make_result retries: 2 delay: 3 until: make_result is succeeded # 7. 权限配置 - name: 设置Zabbix目录权限 file: path: "{{ item }}" state: directory owner: zabbix group: zabbix mode: '0755' recurse: yes # 递归设置子目录 loop: - "{{ zabbix_install_prefix }}/etc" - "{{ zabbix_install_prefix }}/etc/zabbix_agentd.conf.d" - "{{ zabbix_install_prefix }}/scripts" - name: 创建系统命令链接 file: src: "{{ zabbix_install_prefix }}/{{ item.src }}" dest: "/usr/local/{{ item.dest }}/{{ item.src | basename }}" state: link force: yes # 存在旧链接则覆盖 loop: - { src: "bin/zabbix_get", dest: "bin" } - { src: "bin/zabbix_sender", dest: "bin" } - { src: "sbin/zabbix_agentd", dest: "sbin" } # 8. 配置Agent - name: 检查模板文件是否存在 delegate_to: 192.168.16.11 stat: path: "{{ zabbix_agent_template }}" register: template_file failed_when: not template_file.stat.exists - name: 生成Zabbix Agent配置文件 template: src: "{{ zabbix_agent_template }}" dest: "{{ zabbix_install_prefix }}/etc/zabbix_agentd.conf" owner: zabbix group: zabbix mode: '0644' validate: "{{ zabbix_install_prefix }}/sbin/zabbix_agentd -c %s -t agent.ping" # 配置验证 notify: 重启Zabbix Agent # 9. 服务管理配置 - name: 检查启动脚本是否存在 delegate_to: 192.168.16.11 stat: path: "{{ zabbix_init_script }}" register: init_file failed_when: not init_file.stat.exists - name: 部署启动脚本 copy: src: "{{ zabbix_init_script }}" dest: "/etc/init.d/zabbix_agentd" mode: '0755' owner: root group: root notify: 重启Zabbix Agent - name: 配置sudo权限(安全限制) lineinfile: path: /etc/sudoers.d/zabbix create: yes line: "{{ monitor_user }} ALL=(root) NOPASSWD: /etc/init.d/zabbix_agentd start, /etc/init.d/zabbix_agentd stop, /etc/init.d/zabbix_agentd restart, /etc/init.d/zabbix_agentd status" validate: 'visudo -cf %s' mode: '0440' # sudoers文件安全权限 # 10. 防火墙配置 - name: 开放Zabbix Agent端口 firewalld: port: "{{ zabbix_agent_port }}/tcp" permanent: yes immediate: yes state: enabled when: ansible_facts['services']['firewalld.service']['state'] == 'running' - name: 临时关闭SELinux(如需永久关闭请修改/etc/selinux/config) command: setenforce 0 when: ansible_facts['selinux']['status'] == 'enabled' changed_when: false # 11. 启动并验证服务 - name: 启动Zabbix Agent服务 service: name: zabbix_agentd enabled: yes state: started - name: 验证服务是否启动 command: pgrep zabbix_agentd register: agent_process failed_when: agent_process.rc != 0 changed_when: false - name: 验证端口监听 wait_for: port: "{{ zabbix_agent_port }}" state: started timeout: 10 host: 0.0.0.0 handlers: - name: 重启Zabbix Agent service: name: zabbix_agentd state: restarted jumpserver:192.168.16.11 优化修改
最新发布
09-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值