1. AJAX 的概念

AJAX,即 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)

    • 同步:前面的代码不执行完毕,后面的代码无法执行
    • 异步:前面的代码不执行完毕,后面的代码也可正常执行
  • 作用:在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页,实现异步无刷新
  • 运用场景:表单验证,搜索框输入,论坛,博客等

2. XMLHttpRequest 对象

XMLHttpRequest 用于在后台与服务器交换数据

  • 创建XMLHttpRequest 对象
var xmlhttp;
if(window.XMLHttpRequest){
//ie7以上、谷歌、火狐支持
xmlhttp = new XMLHttpRequest();
}else{
//老版本的ie5、6使用ActiveX
xmlhttp = new ActiveXObject();
}
  • 向服务器发送请求

    •   open(请求类型get/post,发送地址,同步true/异步false)
    •   send(string仅用于post请求)  
xmlhttp.open("get","01.txt",true); 
xmlhttp.send();
    •   当选择同步时,规定在响应处于 onreadystatechange(存储函数,当 readyState 属性改变时调用)事件中的就绪状态时执行的函数

      •   readyState 存有XMLHTTPRequest的状态

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

        • 404: 未找到页面

xmlhttp.onreadystatechange=function(){
  //表示响应已就绪
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
    document.getElementById("box").innerHTML = xmlhttp.responseText;
}
}
    •   当选择异步时(不推荐,但可用于小型请求),无需编写 onreadystatechange 函数,把代码放到 send() 语句后面即可

注:JavaScript 会等到服务器响应就绪才继续执行。若服务器繁忙或缓慢,应用程序会挂起或停止。

  • get 方式请求数据
<input type="button" id="btn" value="获取数据">
<div id="box"></div>
<script>
window.onload = function(){
var btn = document.getElementById("btn");
btn.onclick = function(){
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
        xmlhttp = new ActiveXObject();
}
xmlhttp.open("get","01.txt",true);
xmlhttp.send();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById("box").innerHTML = xmlhttp.responseText;
}
}
}
}
</script>

注:get 方式发送的请求会有缓存现象,为避免这种情况,向url添加一个唯一的ID,如下:

//方法一
xmlhttp.open("get","01.txt?t=" + Math.random(),true);
//方法二
xmlhttp.open("get","01.txt?t=" + new Date().getTime(),true);
  • post 方式请求数据
<input type="button" id="btn" value="获取数据">
<div id="box"></div>
<script>
window.onload = function(){
var btn = document.getElementById("btn");
btn.onclick = function(){
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject();
}
xmlhttp.open("post","02.php",true);
xmlhttp.send();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
        document.getElementById("box").innerHTML = xmlhttp.responseText;
}
}
}
}
</script>

注:如需像 HTML 表单那样 POST 数据,用 setRequestHeader(头名称,头的值) 添加 HTTP 头。如下:

xmlhttp.open("post","02.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send();

3. 服务器响应格式

  • responseText 获得字符串形式的响应数据,返回字符串形式的响应
document.getElementById("box").innerHTML = xmlhttp.responseText;
  • responseXML 获得 XML 形式的响应数据
<input type="button" id="btn" value="获取数据">
<div id="box"></div>
<script>
window.onload = function () {
var btn = document.getElementById("btn");
btn.onclick = function () {
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject();
}
xmlhttp.open("get","03.xml?t=" + Math.random(),true);
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var obj = xmlhttp.responseXML;
var arrs = obj.getElementsByTagName("title");
var str = "";
for(var i = 0;i < titles.length;i++){
str += arrs[i].innerHTML;
document.getElementById("box").innerHTML = str;
}
}
}
}
}
</script>
  • JSON 格式
<input type="button" id="btn" value="获取数据">
<ul id="list"></ul>
<script>
window.onload = function () {
var btn = document.getElementById("btn");
btn.onclick = function () {
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject();
}
xmlhttp.open("get","04.json?t=" + Math.random(),true);
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var res = JSON.parse(xmlhttp.responseText);
var arr = res.students;
for(var i = 0;i < arr.length;i++){
var li = document.createElement("li");
li.innerHTML = arr[i].name;
document.getElementById("list").appendChild(li);
}
}
}
}
}
</script>

4. Callback 函数

callback 函数是一种以参数形式传递给另一个函数的函数。

  • 当存在多个 AJAX 任务时,则为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。
function myFunction(){
loadXMLDoc("ajax_info.txt",function(){
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
    document.getElementById("box").innerHTML = xmlhttp.responseText;
  }
 });
}

JavaScript 之 ajax的更多相关文章

  1. 最新JavaScript、Ajax典藏级学习资料下载分类汇总 (2011年12月21日更新)

    其他网站开发相关资料            超强HTML和xhtml,CSS精品学习资料下载汇总                                               最新htm ...

  2. 初识JavaScript,Ajax,jQuery,并比较三者关系

    一.基本认识 1.JavaScript 定义: javaScript的简写形式就是JS,是由Netscape公司开发的一种脚本语言,一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态 ...

  3. JavaScript实现Ajax小结

    置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<TCP的三次握手和四次挥手> 作者主页:myvin 博主QQ:851399101(点击QQ和博主发起临 ...

  4. 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求

    转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...

  5. javascript版Ajax请求

    什么是Ajax请求,Ajax也就是“Asynchronous JavaScript and XML”(异步JavaScript和XML),无刷新数据读取.能减少流量的消耗,也提高了浏览的流畅性,给用户 ...

  6. Javascript与Ajax

    不使用jquery来处理ajax请求该怎么做? 首先要明确html中的某些数据需要从服务端获得,也就是客户端向服务端请求(request)数据,服务端就响应(response)这个请求,把客户端要的数 ...

  7. javascript进阶——Ajax

    统的Web 页面和应用中,用户每点击页面上的某个部分,浏览器就会向服务器发出一个请求,等待服务器做出响应,然后返回一个完整新网页,但在大多数情况下用户不得不忍受页面闪烁和长时间的等待.随着Web技术的 ...

  8. Javascript and AJAX with Yii(在yii 中使用 javascript 和ajax)

    英文原文:http://www.yiiframework.com/wiki/394/javascript-and-ajax-with-yii /*** http://www.yiiframework. ...

  9. javascript实现ajax

    什么是 ajax ajax 即“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),也就是无刷新数据读取. http 请求 首先需要了解 htt ...

  10. JavaScript和ajax 跨域的案例

    今天突然想看下JavaScript和ajax 跨域问题,然后百度看了一下,写一个demo出来 <!DOCTYPE html> <html xmlns="http://www ...

随机推荐

  1. Centos6.5中如何用sqlite3命令打开’.db’后缀的数据库执行sql

      1. 简单sql语句使用: 在任意目录下新建一个数据库,比如student . 命令: sqlite3 student.db 出现如下提示: 输入sql语句create table user(us ...

  2. js 里常用的数组操作方法

    var ar=[112,44,55,66,77,88,99,'00',77]; var ar1=['ddd','fff','ggg']; //concat() 拼接一个或多个数组: //console ...

  3. node创建服务器

    //引入核心模块 const http = require('http'); //创建服务器 http.createServer((req,res)=>{ }).listen(3000); // ...

  4. 课时26.a标签其它属性(掌握)

    4.a标签的href属性除了可以指定一个网络地址以外,还可以指定一个本地地址 a标签中还有一个属性,叫做title,a标签中的title和img标签中的title一样,都是用来控制鼠标悬停时显示的提示 ...

  5. rails + MySQL 存储emoji表情 😯

    database.yml 加入 charset: utf8mb4 encoding: utf8mb4 collation: utf8mb4_unicode_ci 创建migration ,更改要存放表 ...

  6. 【python3】——centos7下安装

    centos7下安装python3总步骤分三步: 一.依赖解决: 1.安装依赖包: yum install zlib-devel bzip2-devel openssl-devel ncurses-d ...

  7. XAMPP之Mysql启动失败

    启动XAMPP中的Mysql出现如下: 可能的原因是本地有多个MySQL,所以要在注册表编辑器中将imagePath改成XAMPP中的mysql的地址.(打开注册表编辑器:win+R,输入regedi ...

  8. 《Java核心技术36讲》阅读笔记:谈谈对Java平台的理解笔记

    1. 谈谈你对Java平台的理解. Java是一种面向对象的语言,最显著的特性有两个方面: 一个就是一次编译,到处运行(Write once, run anywhere),能够非常容易的获得跨平台能力 ...

  9. 笔记-scrapy-selector

    笔记-scrapy-selector scrapy版本:1.5.0 1.总述 scrapy内置selector建立在lxml上. 2.使用 可以使用xpath和css方法来进行解析,两者都返回列表: ...

  10. 自己用原生JS写的轮播图,支持移动端触摸滑动,分页器圆点可以支持mouseover鼠标移入和click点击,高手看了勿喷哈

    自己用原生JavaScript写的轮播图,分页器圆点按钮可支持click点击,也可支持mouseover鼠标悬浮触发,同时支持移动端触摸滑动,有兴趣的友友可以试试哈,菜鸟一枚,高手看了勿喷,请多多指正 ...