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. 轻量ORM-SqlRepoEx (十四)最佳实践之Dapper(1)

    简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM.解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程 ...

  2. 梯度下降法&牛顿法

    梯度下降法 在机器学习任务中,需要最小化损失函数\(L(\theta)\),其中\(\theta\)是要求解的模型参数.梯度下降法是一种迭代方法,用到损失函数的一阶泰勒展开.选取初值\(\theta ...

  3. [iOS]CIFilter滤镜

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  4. 【2017 ICPC亚洲区域赛北京站 J】Pangu and Stones(区间dp)

    In Chinese mythology, Pangu is the first living being and the creator of the sky and the earth. He w ...

  5. mysql/mariadb学习记录——连接查询(JOIN)

    //本文使用的数据表格//persons表中id_p为主键//orders表中id_o为主键,id_p为外键参考persons表中的id_p mysql> select * from perso ...

  6. 使用xampp发现php的date()函数与本地相差7个小时

    具体方法: 1. 打开php.ini 2. 搜索timezone 3. 修改为PRC 4. 回车键 5. 修改为PRC 6. 完成 没想到这么一个小问题也是一个大坑,在网上找了半天基本都是说要修改这个 ...

  7. Rabbitmq(三)

    1.在服务器安装好rabbitmq后,自己配置自己用的vhost,exchange和queue的绑定 2.项目添加RabbitMqClient.dll(nuget获取)引用 3.添加helper就可以 ...

  8. Redis集群入门

    官方文章: https://redis.io/topics/cluster-tutorial#redis-cluster-configuration-parameters 本文永久地址: https: ...

  9. 20155213 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告

    20155213 <JAVA程序设计>实验二(JAVA面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...

  10. 20155320 实验四 Android程序设计

    20155320 实验四 Android程序设计 实验内容 (一)Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for ...