什么是 AJAX ?

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX
可以使网页实现异步更新。

这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

同步请求:返回的是整张页面,会刷新整个页面,他是串行的过程,只能同时做一件事。

异步请求:返回的是字符串(页面的部分信息),不会刷新整个页面,不会阻塞当前主线程。

AJAX通过核心对象XMLHttpRequest在后台发起子线程,该子线程负责此次的请求,会请求服务器,服务器会返回一个字符串,该字符串会封装在XMLHttpRequest里的responseText属性中,然后请求返回客户端,可通过xhr.responseText获取服务器返回的字符串,然后通过DOM技术修改DOM树。由于是子线程在发起请求,所以不会阻塞当前显示页面的主线程,即异步请求。由于返回的是字符串且是通过DOM技术在修改DOM树,所以不会刷新整张页面,即局部刷新,这就是我们所说的AJAX异步请求,局部刷新。

应用场景:需要请求服务器,但只需要更新局部页面信息时。

AJAX的开发流程

1、创建核心对象xhr(不同浏览器创建此对象的方式不同)

var xhr;

if (window.XMLHttpRequest) {

// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码

xhr=new XMLHttpRequest();

} else {

// IE6, IE5 浏览器执行代码

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

2、初始化xh---->目的:告知xhr以什么方式发送,发送到什么位置且携带什么参数。

get方式:xhr.open(“get”,url?传递参数);

post方式:xhr.open(“post”,url);,

若需要传递参数则需指定参数格式

xhr.setRequestHeader(“Content-type”,”application/x-www-form-urlencoded”);

3、发送异步请求

get方式:xhr.send();

post方式:若无参数xhr.send();

若需要传递参数,则xhr.send(“需要传递给服务器的参数”);

注:从请求发出到请求返回,xhr.readyState的属性(标识xhr的请求状态)会经历以下几个阶段的变化:

=0,表示初始化但并没有发送异步请求

=1,表示已发送异步请求

=2,表示已发送完毕

=3,表示开始返回

=4,表示返回完毕

4、设置监听,通过xhr.onreadystatechange属性

注:xhr.status为协议码,表示请求的状态(例:404,500),当其为200时,表示请求成功

xhr.onreadystatechange = function(){

if(xhr.readyState==4 && xhr.status==200){//返回完整,请求成功

var res = xhr.responseText;//获取返回值

//拿到返回值后可对dom操作,局部刷新页面

}

}

代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body οnlοad="load()">
</body>
<script type="text/javascript">
function load(){ //1.创建核心对象xhr
var xhr;
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr=new XMLHttpRequest();
} else {
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} //2.初始化xhr
xhr.open("GET","index.html");
//3.发送异步请求
xhr.send();
//4.设置监听
xhr.onreadystatechange = function(){
if(xhr.readyState==4 && xhr.status==200){//返回完整,请求成功
var res = xhr.responseText;//获取返回值
//拿到返回值后可对dom操作,局部刷新页面
alert(res);
}
} } </script>
</html>

还有JQuery对Ajax的 封装:

演示:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<table id="testTable">
<tr>
<td>中国</td>
<td>秦国</td>
</tr> </table>
<input type="button" value="异步刷新用户列表" οnclick="testAjax()"/>
</body>
<script src="jquery.1.9.2.min.js" type="text/javascript">
</script>
<script type="text/javascript"> function testAjax(){
$.ajax({
type:"get", //发送请求的方式,默认请求方式为get
url:"/Jquery/jason.txt", //发送到什么位置
success:function(res){//会在返回完整,请求成功时调用,其中的参数是返回值 for(var i=0;i<res.length;i++){ $("#testTable").append("<tr><td>"+res[i].id+"</td><td>"+res[i].name+"</td></tr>");
}
},
dataType:"json"
});
} </script> </html>

Ajax的简单基础的更多相关文章

  1. ASP.NET MVC Ajax.ActionLink 简单用法

    ASP.NET MVC 项目中,如何使用类似于 iframe 的效果呢?或者说 Ajax 局部刷新,比如下面操作: 我们想要的效果是,点击 About 链接,页面不刷新(地址栏不变),然后下面的内容进 ...

  2. ajax从零基础到实战

    一. 什么是AJAX? ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 二. 在项目中怎么运用AJAX? 项目主要文件夹目录有img文件夹,css文件夹,js文件夹,如果你要运 ...

  3. html --- ajax --- javascript --- 简单的封装

    Ajax的简单封装 Ajax的全称是AsynchronousJavaScriptAndXML 如有疑问请参考:http://zh.wikipedia.org/zh-cn/AJAX 以及传智播客的视频教 ...

  4. MVC3.0+knockout.js+Ajax 实现简单的增删改查

    MVC3.0+knockout.js+Ajax 实现简单的增删改查 自从到北京入职以来就再也没有接触MVC,很多都已经淡忘了,最近一直在看knockout.js 和webAPI,本来打算采用MVC+k ...

  5. php+jquery+ajax+json简单小例子

    直接贴代码: <html> <title>php+jquery+ajax+json简单小例子</title> <?php header("Conte ...

  6. AJAX的一些基础和AJAX的状态

    大佬们,我又回来了,最近好几天都没写博客了,别问我干啥去了,我只是去围观奶茶妹变成抹茶妹而已 前几天我们一起封装了一个AJAX,那今天我们来说说AJAX的一些基础和AJAX的状态码 首先,啥是AJAX ...

  7. 第107天:Ajax 实现简单的登录效果

    使用 Ajax 实现简单的登录效果 Ajax是一项使局部网页请求服务器信息,而不需整体刷新网页内容的异步更新技术.这使得向服务器请求的数据量大大减少,而且不会因局部的请求失败而影响到整体网页的加载. ...

  8. 2.1实现简单基础的vector

    2.1实现简单基础的vector 1.设计API 我们参考下C++ <std> 库中的vector, vector中的api很多,所以我们把里面用的频率很高的函数实现; 1.1 new&a ...

  9. java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))

    1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...

随机推荐

  1. centos6.4下安装python3.6.1

    1.安装编译环境所需包 #yum install zlib-devel bzip2-devel openssl-devel ncurese-devel gcc zlib 安装成功 2.下载源码包 #w ...

  2. <每日一题>算法题:集合求并集并排序

    题目描述 给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素. 输入描述: 每组输入数据分为三行,第一行有两个数字n,m(0 ≤ n,m ≤ 10000),分别表示集合A和集 ...

  3. 重温robotframework--day1

    RF支持中文编码设置 1.python2.6  [PythonDir]\Lib\site-packages\robot\utils下的encoding.py文件中,在文件上点击右键,选择Edit wi ...

  4. shell脚本练习05

    ######################################################################### # File Name: -.sh # Author ...

  5. SF Symbols 使用

    伴随着WWDC 2019 的举办,对于程序员而言 ,无疑SwiftUI 推出 是比较令人兴奋的一件事情, 其中在SwiftUI 使用之中, 我们经常使用以下系统图片 Image(systemName: ...

  6. Caffe系列1——网络文件和求解分析

    1. 首先,我们先看一个完整的文件:lenet_train_test.prototxt name: "LeNet" #整个网络的名称 layer { #数据层——训练数据 name ...

  7. CF596D Wilbur and Trees

    题意:有一些高度为h的树在数轴上.每次选择剩下的树中最左边或是最右边的树推倒(各50%概率),往左倒有p的概率,往右倒1-p. 一棵树倒了,如果挨到的另一棵树与该数的距离严格小于h,那么它也会往同方向 ...

  8. 进程互斥软件实现之Lamport面包店算法

    一. 进程互斥的实现方式 1. 软件方式: 保护临界区, 自己编写代码来实现对进程的控制. Dekker算法Peterson算法Lamport算法等 2. 硬件方式: 使用特殊指令保护临界区. 开关中 ...

  9. 你必须知道的.NET Day1

  10. half adder vs. full adder

    1, half adder 2-input, 2-output input: A, B; output out, carry; 2, full adder 3-input, 2-output inpu ...