Ajax的简单基础
什么是 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的简单基础的更多相关文章
- ASP.NET MVC Ajax.ActionLink 简单用法
ASP.NET MVC 项目中,如何使用类似于 iframe 的效果呢?或者说 Ajax 局部刷新,比如下面操作: 我们想要的效果是,点击 About 链接,页面不刷新(地址栏不变),然后下面的内容进 ...
- ajax从零基础到实战
一. 什么是AJAX? ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 二. 在项目中怎么运用AJAX? 项目主要文件夹目录有img文件夹,css文件夹,js文件夹,如果你要运 ...
- html --- ajax --- javascript --- 简单的封装
Ajax的简单封装 Ajax的全称是AsynchronousJavaScriptAndXML 如有疑问请参考:http://zh.wikipedia.org/zh-cn/AJAX 以及传智播客的视频教 ...
- MVC3.0+knockout.js+Ajax 实现简单的增删改查
MVC3.0+knockout.js+Ajax 实现简单的增删改查 自从到北京入职以来就再也没有接触MVC,很多都已经淡忘了,最近一直在看knockout.js 和webAPI,本来打算采用MVC+k ...
- php+jquery+ajax+json简单小例子
直接贴代码: <html> <title>php+jquery+ajax+json简单小例子</title> <?php header("Conte ...
- AJAX的一些基础和AJAX的状态
大佬们,我又回来了,最近好几天都没写博客了,别问我干啥去了,我只是去围观奶茶妹变成抹茶妹而已 前几天我们一起封装了一个AJAX,那今天我们来说说AJAX的一些基础和AJAX的状态码 首先,啥是AJAX ...
- 第107天:Ajax 实现简单的登录效果
使用 Ajax 实现简单的登录效果 Ajax是一项使局部网页请求服务器信息,而不需整体刷新网页内容的异步更新技术.这使得向服务器请求的数据量大大减少,而且不会因局部的请求失败而影响到整体网页的加载. ...
- 2.1实现简单基础的vector
2.1实现简单基础的vector 1.设计API 我们参考下C++ <std> 库中的vector, vector中的api很多,所以我们把里面用的频率很高的函数实现; 1.1 new&a ...
- java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))
1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...
随机推荐
- java编程规约三
七.集合处理 1.尽量使用String对象做Map的key 2.list转数组,用list的toArray(T[] array),传入的参数array是类型完全一样的数组,大小是list.size() ...
- Java 面试题经典 77 问(含答案)!
金三银四了,3月底,4月初,找工作换单位的黄金时期.4月初将会有有一大批职场人士流动... 作为Java开发码农的你是不是也在蠢蠢欲动,或者已经搞了几轮车轮战了? 我们为大家准备了 77 道经典 Ja ...
- 【AT3611】Tree MST
题目 这个题的输入首先就是一棵树,我们考虑一下点分 我们对于每一个分治重心考虑一下跨过这个分治重心的连边情况 就是把当前分治区域内所有的点向距离分治重心最近的点连边 考虑一下这个算法的正确性,如果我们 ...
- seienium基础(测试脚本中的等待方法)
测试脚本中的等待方法 一.加等待时间的目的 等待是为了使脚本执行更加稳定 二.常用的休眠方式 第一种 sleep(): 设置固定休眠时间.python 的 time 包提供了休眠方法 sleep() ...
- Netstat- Linux必学的60个命令
1.作用 检查整个Linux网络状态. 2.格式 netstat [-acCeFghilMnNoprstuvVwx][-A][--ip] 3.主要参数 -a--all:显示所有连线中的Socket. ...
- 打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口。 语法: window.open([URL], [窗口名称], [参数字符串])
打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL: ...
- [记录]Wdinwos scikit-learn 安装
安装的软件有: Python: 3.6.0 numpy-1.11.3+mkl-cp36-cp36m-win_amd64.whl(全名) scipy-0.19.0-cp36-cp36m-win_amd6 ...
- js闭包与java内部类
在js中闭包用的比较广泛,主要解决变量作用域导致的问题.
- LoadRunner脚本编写(5)-- 检查点,关联等函数
LoadRunner脚本编写(5)-- 检查点,关联等函数 http://www.51testing.com/?34866/action_viewspace_itemid_70224.html来继续翻 ...
- 【自家测试】2017-12-16 FJOI2016 d1
1. 所有公共子序列问题(allcs.pas/c/cpp)★问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X= x 1 x 2 ... x m ,则另一序列Z ...