day37(事件轮询机制 ajaxGet执行步骤与案例(五个步骤) ajax属性 PHP返回JSON对象(两种))

这篇具有很好参考价值的文章主要介绍了day37(事件轮询机制 ajaxGet执行步骤与案例(五个步骤) ajax属性 PHP返回JSON对象(两种))。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.事件轮询机制

1. 无论同步还是异步代码都要经过主线程编译,同步代码开始排在执行栈(主线程)上,异步代码开    始存放在任务队列中
2. 主线程优先执行同步代码,同步代码必须前一行执行完,后一行才能执行;当异步代码完成等待状态,会通知主线程,当主线程执行完所有代码块后,会执行等待结束的异步代码
3. 当执行异步代码时,有微则先微,无微则宏
而异步任务又分为宏任务(macro-task)与微任务(micro-task):
    宏任务大概包括:script(整块代码)、setTimeout、setInterval、I/OUI交互事件、setImmediate(node环境)
    微任务大概包括:new promise().then(回调)、MutationObserver(html5新特新)、Object.observe(已废弃)、process.nextTick(node环境)

二.ajaxGet执行步骤(五个步骤)

执行步骤:
    1.创建 XMLHttpRequest对象:let xhr = new XMLHttpRequest();
    2.调用xhr.open("发请求的方式post/get","服务器地址",是否异步true/false):xhr.open("get","3.ajax.txt",true);
    3.发送请求:xhr.send()
    4.xhr.onreadystatechange事件:xhr.onreadystatechange = function(){....}
    5.if(xhr.status==200 && xhr.readyState==4)
html:
    <div>
        嘤嘤嘤
    </div>
    <button>异步交互</button>
script:
    let oDiv = document.querySelector("div");
    let oBtn = document.querySelector("button");

    oBtn.onclick = function(){
        
        let xhr = new XMLHttpRequest();-------------------创建 XMLHttpRequest对象

       
        xhr.open("get","3.ajax.txt",true);----调用xhr.open("发请求的方式post/get","服务器地址",是否异步true/false);

        xhr.send();---------------------xhr.send()发送请求

        xhr.onreadystatechange = function(){-------------4.---> xhr.onreadystatechange事件
            
            if(xhr.status==200 && xhr.readyState==4){--------------5.---> xhr.responseText 对面给说的内容
               
                fun(xhr.responseText);
            }
        }
    }

    function fun(resText){
        oDiv.innerHTML = resText;
    }

三.ajaxGet案例(三个重要点)

    1.in_array(目标对象,数组): 在数组中找目标对象,找到返回下标,找不到返回undefined
    2.echo在参与ajax的时候,代表返回响应的关键字,语法为:echo 响应的内容
    3.get的传参方式,是将请求参数携带在url上(url?key1=value1&key2=value2...)
 html:
    <input type="text"><span></span>
 script:
    let oInput = document.querySelector("input");
    let oSpan = document.querySelector("span");

    oInput.onblur = function(){
        let xhr = new XMLHttpRequest();
        xhr.open("get",`4.ajaxGet.php?userName=${oInput.value}`,true);--------get的传参方式,是将请求参数携带在url上
        xhr.send();
        xhr.onreadystatechange = function(){
            if(xhr.status==200 && xhr.readyState==4){
                fun(xhr.responseText);
            }
        }
    }

    function fun(resText){
        oSpan.innerHTML = resText;
               ↓↓↓↓↓↓-----------------------------优化:前后端分离(后端尽量不要返回描述性质的字符串,尽可能返回状态码,比如01if(resText == "1"){
            oSpan.innerHTML = "不能注册";
        }else{
            oSpan.innerHTML = "可以注册";
        }
    }

php:
    <?php
    
    $arr = ["坤坤","凯凯","谦谦","凢凢"];---------------此处使用数组模拟数据库,省略了后端连数据库的代码

    $name = $_GET["userName"];

    if(in_array($name,$arr)){
        
        echo "1";
    }else{
        echo "0";
    }
?>

四.ajax属性

1.集纳
	onreadystatechange:通过readystate的改变去触发,只有2,3,4会触发
	readystate:五个状态
	    0:new出来xhr对象
	    1:调用完open方法
	    2:调用了send方法,发送请求给服务器
	    3:服务器接收到了请求
	    4:服务器根据请求完成解析,准备返回响应内容
	status:http协议的状态
	    200 请求响应成功
	    404 检查url是否有问题
	    5xx 后端服务器问题
2.readystate5个   status3个
	xhr.open("get/post大小写都可以","url|url?key1=vaue1...",true/false);
	xhr.send(get无参|post的请求参数:key1=value1&key2=value2);
	
	let xhr = new XMLHttpRequest();
	console.log(xhr.readyState);--------------------此处xhr.readyState值为0
	xhr.open("get","3.ajax.txt",true);
	console.log(xhr.readyState);--------------------此处xhr.readyState值为1
	xhr.send();
	
	onreadystatechange:通过readystate的改变去触发,只有2,3,4会触发
	readystate:五个状态
	    0:new出来xhr对象
	    1:调用完open方法
	    2:调用了send方法,发送请求给服务器
	    3:服务器接收到了请求
	    4:服务器根据请求完成解析,准备返回响应内容
	
	status:http协议的状态
	    200 请求响应成功
	    404 检查url是否有问题
	    5xx 后端服务器问题
	    
	xhr.responseText:所做的所有一切,就是为了得到它
	    xhr.onreadystatechange = function(){
	        console.log(xhr.readyState);
	        if(xhr.readyState==4 && xhr.status==200){
	            fun(xhr.responseText);
	        }
	    }
	
	    function fun(resText){
	        console.log(resText);
	    }

五.php返回JSON对象(两种)文章来源地址https://www.toymoban.com/news/detail-714022.html

<?php
    方式1:返回json形式字符串
    echo '{"1":"老王","2":"小明","3":"马好奇"}';

    方式2:返回键值对数组
    $arr = ["1"=>"老王","2"=>"小明","3"=>"小马哥"];
    
    echo json_encode($arr);-------------------------------该函数json_encode()将键值对数组转换为json字符串
?>

到了这里,关于day37(事件轮询机制 ajaxGet执行步骤与案例(五个步骤) ajax属性 PHP返回JSON对象(两种))的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Day 37 贪心算法 6

    代码随想录  1. 思路 从后向前判断,如果不呈现单调递增的状态,后一位变成9,前一位-1。这里局部最优是每两位的最优解,从后向前线性遍历能得到全局最优。 但是有一点没有想清楚 。如果出现了上述的两位数倒序情况,之后的所有数字都应该变成9。例如52583,最小的递

    2024年02月01日
    浏览(27)
  • 算法记录 | Day37 贪心算法

    思路: 1.一旦出现strNum[i - 1] strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。 2.向后遍历 从前向后遍历的话,遇到strNum[i - 1] strNum[i]的情况,让strNum[i - 1]减一,但此时如果strNum[i - 1]减一了,可能

    2023年04月22日
    浏览(19)
  • Day37 贪心算法part06

    前面都想到了,结果最后n[i]给写错了直接写成9了,得把后面的全都改成9才行 摄像头的覆盖范围是上中下 遇到叶子结点,放到叶子结点的父节点 每隔两个空节点放一个摄像头 所以要用后序遍历 把结点分为三个状态:0无覆盖1有摄像头2有覆盖 空节点要设置为有覆盖的状态

    2024年02月19日
    浏览(31)
  • LeetCode 每日一题 Day 37-43

    终于考完试了,寒假期间将会每天持续更新! 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的欧式距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。 返回平面上所有回旋镖的数量。 示例 1: 输

    2024年01月17日
    浏览(25)
  • nginx加权轮询,upstream,Keepalive,负载均衡实现案例

    1. nginx 加权轮询, weight是权重配置。

    2024年02月08日
    浏览(31)
  • C语言--每日选择题--Day37

    1. 有以下说明语句:则下面引用形式错误的是() A:p-num B:(p++).num C:(p++)-num D:(*p).num 本题考查的是对结构体变量如何引用,如果是结构体定义的对象,用 \\\' - \\\';如果是结构体的指针,就用 \\\' . \\\' ; A:p是一个结构体指针,指向的是一个结构体数组的首元素,所以p-num,拿到

    2024年02月03日
    浏览(26)
  • 学习JavaEE的日子 Day37 各种流

    1.对象流 class ObjectInputStream – 对象输入流 class ObjectOutputStream – 对象输出流 理解: ​ 将程序中的对象写入到文件 ​ 并且从文件中读取出对象到程序里 序列化(钝化):将程序里的对象写入到文件 反序列化(活化):将文件里的对象读取到程序中 注意: 如果对象想写入文件,

    2024年04月13日
    浏览(19)
  • Android常用的延迟执行任务及轮询定时任务的几种方式

    Executor 的 execute 方法:向线程池中提交任务(异步执行) Executor 接口是 Java 并发编程中的一个接口,它定义了一种执行任务的通用机制。Executor 接口有一个重要的方法 execute,它的作用是提交一个任务(Runnable 或 Callable)给 Executor 进行执行。 execute 方法的作用如下: 提交任务:

    2024年04月25日
    浏览(29)
  • DAY37:贪心算法(四)跳跃游戏+跳跃游戏Ⅱ

    给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 示例 2: 提示: 1 = nums.length = 3 * 104 0 = nums[i] = 105 思路 游戏大致规则如下图。每一步代表着能跳跃的最大长

    2024年02月12日
    浏览(32)
  • 【算法日志】动态规划刷题:01背包问题,多重背包问题(day37,day38)

    目录 前言 目标和(01背包) 一和零(01背包) 零钱兑换(多重背包) 排列总和(多重背包) 这两天都是背包问题,其中的01背包的一些应用问题需要一定的数学建模能力,需要i将实际问题简化成我们熟悉的背包问题;而这两天的多重背包问题还算比较基础,但也要我明白了

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包