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. shell习题第6题:监听80端口

    [题目要求] 写一个脚本,判断本机的80端口(加入服务为httpd)是否开启,如果开启就什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知相关人员 [核心要点] 检测80端口使用 ...

  2. Linux C 语言之 Hello World 详解

    目录 Linux C 语言之 Hello World 详解 第一个 C 语言程序 程序运行原理 编译,链接 运行时 链接库 编译器优化 Hello World 打印原理 stdout, stdin 和 ...

  3. MySQL用户账户管理/权限管理/资源限制

    MySQL 的权限表在数据库启动的时候就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了. mysql 的权限体系大致分为5个层级: ...

  4. Linux CentOS Python开发环境搭建教程

      CentOS安装Python 1.CentOS已经自带安装了2.x版本,先尝试python命令检查已安装的版本.如果你使用rpm.yum或deb命令安装过,请使用相对命令查询. 2.复制安装文件链 ...

  5. 20155321 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    实验要求 使用JDK编译.运行简单的Java程序: 使用IDEA 编辑.编译.运行.调试Java程序. 实验内容 命令行下Java程序开发 打开windows下的cmd → 输入cd Code命令进入 ...

  6. elasticsearch 安装问题

    Elasticsearch5.0 安装问题集锦 elasticsearch 5.0 安装过程中遇到了一些问题,通过查找资料几乎都解决掉了,这里简单记录一下 ,供以后查阅参考,也希望可以帮助遇到同样问题 ...

  7. 使用装饰器@property

    1.在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 98s.score = 1000 # 属性 ...

  8. Drupal7 针对特定条件才显示区块

    当D7中开启PHP filter模块. Text format就会多出“PHP Code”选项. 而且,新建block时也会多出"Pages on which PHP code return ...

  9. Unity3D使用NGUI实现简单背包功能

    前话 在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少. 那在Unity3D游戏开发中该如何编写背包系统呢?因为有高人开发了NGUI插件,因此我们进行简 ...

  10. C#--Switch Case语句的返回

    C#中switch case语句的返回不只是用break关键字,break语句是用来阻止贯穿的最常见的方式.也可以用其他语句来替代它.如下面代码所示 static int Main(string[] ...