ajax学习总结

ajax 总结


ajax学习总结

全局刷新与局部刷新

全局刷新

由浏览器向服务端发送请求,服务端处理请求并返回响应数据,全局刷新就是会将原来浏览器内存中的页面完全覆盖掉。

例如:index.html页面向后台发送一个请求,此时浏览器内存中是index.html的数据,服务器接收到前端页面发送的请求并处理请求返回响应给前台,返回后的数据会将原来页面的内容全部覆盖掉,整个浏览器的数据全部被刷新。从新在窗口显示数据,样式,标签等。

全局刷新原理:

  1. 必须由浏览器亲自向服务端发送请求协议包。
  2. 这个行为导致服务端直接将【响应包】发送到浏览器内存中
  3. 这个行为导致浏览器内存中原有内容被覆盖掉
  4. 这个行为导致浏览器在展示数据时候,只有响应数据可以展示

局部刷新(重点)

浏览器在展示数据的时,此时在窗口可以看到本次响应数据,同时又可以看到浏览器内存中原有的数据

局部刷新的原理:

  1. 不是由浏览器发送请求给服务端。
  2. 浏览器委托浏览器内存中的一个脚本代替浏览器发送请求。
  3. 这个行为导致服务端直接将响应包发送脚本对象的内存中
  4. 会导致脚本对象的内容被覆盖掉,但是此时浏览器内存中的绝大部分内容并未受影响。
  5. 所以可以在浏览器上同时展示原有数据和响应数据。

Ajax是实现局部刷新的一种技术。

异步请求对象

在局部刷新,需要创建一个对象,代替浏览器发起请求的行为,这个对象存在内存中。代替浏览器发起请求并接收响应数据。这个对象叫做异步请求对象。

全局刷新是同步行为,局部刷新是异步行为。

这个异步对象用于在后台与服务器交换数据。XMLHttpRequest 就是我们说的异步对象。

XMLHttpRequest 对象能够:

  • 在不重新加载页面的情况下更新网页
  • 在页面已加载后向服务器请求数据
  • 在页面已加载后从服务器接收数据
var xmlhttp=new XMLHttpRequest();
//创建异步对象。ajax中的核心对象就是XMLHttpRequest

Ajax

什么是Ajax

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和XML)

AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分页面内容的新方法

Ajax不仅需要前端的技术,同时需要后端(服务器)的配合。服务器需要提供数据,数据是Ajax请求相应的结果。

Ajax 异步实现的步骤


function loadXMLDoc()
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // IE6, IE5 浏览器执行代码
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
    xmlhttp.send();
}

使用 AJAX 修改该文本内容
修改内容

1,创建对象的方式

xmlhttp=new XMLHttpRequest();

XMLHttpRequest 对象用于和服务器交换数据。

2,onreadstatechange 事件

xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }

当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。readyState 属性存有 XMLHttpRequest 的状态信息。

xmlhttp.readyState的值及解释:

  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接收
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪

status:

  • 200: “OK”
  • 404: 未找到页面

xmlhttp.readyState== 4 && xmlhttp.status ==200的解释:请求完成并且成功返回

3,初始化请求参数

    xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
规定请求的类型、URL 以及是否异步处理请求。
  • method:请求的类型;GET 或 POST
  • url:文件在服务器上的位置
  • async:true(异步)或 false(同步)
send(string);
//string 仅用于post请求
请求类型的深究

请求类型:

  • get
  • post
get

与post请求相比get请求更加简单,更快,更安全,我们大部分时间都是在使用get请求,然而存在即合理为什么需要post请求,因为有些需求是get处理不了的,比如:向服务上传数据…

以下的情况使用post更加合理:

  • 不愿使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

get请求是会使用缓存的,有个小技巧如果你想要得到服务器最新的内容而不是缓存中的内容:

xmlhttp.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true);
xmlhttp.send();

如果您希望通过 GET 方法发送信息,请向 URL 添加信息:

xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);
xmlhttp.send();
post
xmlhttp.open("POST","/try/ajax/demo_post.php",true);
xmlhttp.send();

如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:

xmlhttp.open("POST","/try/ajax/demo_post2.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("fname=Henry&lname=Ford");

4,发送请求

如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open()send() 方法:

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

5,接收服务器响应的数据

xmlhttp.responseText;
xmlhttp.responseXMl;

服务器的响应:

​ 如需获得来自服务器的响应,请使用XMLHttpRequest对象的responseText或responseXMl属性。

处理JSON数据时 JSON.parse()方法将数据转化为javascript对象。

也可以发送 JSON 数据向服务器:

xmlhttp.send(JSON.stringify({ "email": "admin@runoob.com", "response": { "name": "runoob" } }));

注意点

对于 web 开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时。AJAX 出现之前,这可能会引起应用程序挂起或停止。

通过 AJAX,JavaScript 无需等待服务器的响应,而是:

  • 在等待服务器响应时 执行其他脚本
  • 当响应 就绪后对响应进行处理

当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status==200){                                        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
      }
   }
xmlhttp.open("GET","/try/ajax/ajax_info.txt",true); xmlhttp.send();

我们不推荐使用 async=false,但是对于一些小型的请求,也是可以的。

请记住,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。

注意:当您使用 async=false 时,请不要编写 onreadystatechange 函数 – 把代码放到 send() 语句后面即可:

xmlhttp.open("GET","/try/ajax/ajax_info.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

开发中很少使用原生的 js 进行开发,JQuery现在虽然并不热门却也普遍,所以我们需要知道在JQuery中Ajax的使用。

$("button").click(function(){
    $.ajax({
        url:"demo_test.txt",
        data:{
            name:"",
            value:""
        },
        type:"post",
        dataType:"json",
        success:function(result){
      //对服务器响应的数据进行处理,通常是JSON字符串,这次明确指定了返回为JSON字符串(dataType:'json'), ....

    }});
});

Original: https://www.cnblogs.com/kobedu/p/16379523.html
Author: kobedu
Title: ajax学习总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/587247/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Nginx配置反向代理WebSocket

    最近做了个微信小程序付款码进行平台内支付的功能,然后小程序则需要连接WebSocket来实时获取当前付款码的支付是否成功的状态,成功则显示支付成功的提示内容。 本地测试时,使用的I…

    Java 2023年6月16日
    096
  • 【java.lang.UnsatisfiedLinkError: 找不到指定的模块。】问题的解决

    Java程序引用C写的DLL动态库,出现如下错误:【java.lang.UnsatisfiedLinkError: 找不到指定的模块。】网上查询有三种可能导致此错误。 一、JDK版…

    Java 2023年5月29日
    068
  • shiro Realm体系

    shiro Realm体系 上图是整个Realm的继承和实现体系,Realm主要就是对用户的身份主体进行验证如(账号和密码),其中顶层接口为Realm Realm:主要对用户进行身…

    Java 2023年6月7日
    071
  • Camunda工作流引擎简单入门

    一、简介 Camunda是一个工作流引擎,执行Bpmn2.0标准,因此依赖于基于bpmn的流程图(本质上是一个xml文件) 二、一个完整的报销 demo 入门 1、创建一个Spri…

    Java 2023年6月13日
    085
  • SpringBoot启动过程(生命周期及事件)概述

    总结: ======================== 详见正文:SpringBoot生命周期事件——BAT的乌托邦 正文 本文将以 SpringApplication的启动流程…

    Java 2023年5月30日
    098
  • [感谢坑娘][回忆3年前]茜色的终点线….

    虽然没有H的汉化,我还是走到茜色的终点 其实我有想过,也有人说坑娘能填坑就不叫坑娘 虽然之前都是玩着EGO游戏… 虽然最早我接触GALGAME是 Man at work…

    Java 2023年5月29日
    081
  • Java注解Annotaton

    1、三种基本的Annotaton @Override : 限定某个方法,是重写父类方法 , 该注解只能用于方法@Deprecated : 用于表示某个程序元素 ( 类 , 方法等 …

    Java 2023年6月5日
    081
  • 掌握这些Java基础知识,面试再也不难

    掌握这些Java基础知识,面试再也不难,这几天一直在公司忙于学习公司的业务,很难抽出时间记录博客。之前投的简历在上周周末进行了面试,中等大小的公司,以下是问到的面试题,之前有记录过…

    Java 2023年6月9日
    074
  • Docker学习笔记二(linux下安装Docker)

    Docker学习笔记二(linux下安装Docker) 1.在线安装linux Docker 这种方式首先要保证linux 环境下可以上网,当然,小编是在自己的电脑上安装了虚拟机,…

    Java 2023年6月16日
    098
  • easyExcel复杂头的写入

    背景 最新项目有个新需求,把项目中的数据通过excel的固定模板导出,懒懒的我不怎么会poi就使用easyexcel简化操作步骤 步骤 根据easyExcel的官方文档 https…

    Java 2023年6月5日
    087
  • Guava Retryer实现接口重试

    前言 小黑在开发中遇到个问题,我负责的模块需要调用某个三方服务接口查询信息,查询结果直接影响后续业务逻辑的处理; 这个接口偶尔会因网络问题出现超时,导致我的业务逻辑无法继续处理; …

    Java 2023年6月7日
    089
  • Linux系统中Redis和Tomcat的PID文件路径设置

    Tomcat: /bin/catalina.sh 文件头注释下面添加一行:CATALINA_PID=/var/run/tomcat.pid Redis: redis.conf配置文…

    Java 2023年6月5日
    0110
  • 【IDEA】IDEA 快捷键(Windows 版)

    Ctrl 快捷键 介绍 Ctrl + F 在当前文件进行文本查找 (必备) Ctrl + R 在当前文件进行文本替换 (必备) Ctrl + Z 撤销 (必备) Ctrl + Y …

    Java 2023年6月7日
    075
  • 多系统对接的适配与包装模式应用

    日常开发系统中通常需要对接多个系统,需要用到适配器模式。 例如:支付方式就涉及多个系统对接。 国际惯例,先引入概念。 适配器模式: 提到适配器自然就能想到手机用的电源适配器。 他的…

    Java 2023年6月9日
    090
  • MongoDB基于GridFS管理文件

    GridFS是一种将大型文件存储在MongoDB的文件规范: 数据库支持以BSON格式保存二进制对象。 但是MongoDB中BSON对象最大不能超过4MB。 GridFS 规范提供…

    Java 2023年6月7日
    062
  • 建造者设计模式

    可以看到这个学生类的属性是非常多的,所以构造方法不是一般的长,如果我们现在直接通过new的方式去创建: 可以看到,我们光是填参数就麻烦,我们还得一个一个对应着去填,一不小心可能就把…

    Java 2023年6月6日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球