Asynchronous JavaScript And XML

什么是Ajax?

• Asynchronous :异步

• JavaScript :JS语言

• And :和

• XML :万能的数据传输格式

Ajax :异步的JavaScript与XML,这就是Ajax介绍。

本质是客户端通过HTTP请求向服务器发送请求

无刷新,让JS发送HTTP请求

一、Ajax对象


1.1 获取对象

基于W3C标准的浏览器

var xhr = new XMLHttpRequest();

IE浏览器方式(IE8开始向W3C标准靠拢)

var xhr = new ActiveXObject('Microsoft.XMLHTTP');

将兼容代码封装进函数调用

<script>
//封装进函数供其他程序调用
function cXHR(){try{return new XMLHttpRequest()}catch(e){};try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){};
}
</script>

1.2属性

readyState 获取Ajax状态码

0: 表示对象已建立, 但未初始化, 只是 new 成功获取了对象, 但是未调用open方法
1: 表示对象已初始化, 但未发送, 调用了open方法, 但是未调用send方法
2: 已调用send方法进行请求
3: 正在接收数据(接收到一部分) , 客户端已经接收到了一部分返回的数据
4: 接收完成, 客户端已经接收到了所有数据

status http响应状态码

HTTP状态码:

1: 消息

2: 成功

3: 重定向

4: 请求错误(文件不存在,没有权限)

5: 服务器内部错误

responseText: 如果服务器端返回字符串,使用responseText进行接收

responseXML: 如果服务器端返回XML数据,使用responseXML进行接收

onreadystatechange: 当 readyState 状态码发生改变时所触发的回调函数

1.3方法

open(method,url,async) 初始化Ajax对象

method请求方式: get/post

url请求的服务器地址

async true代表异步请求,false 代表同步请求,默认异步

setRequestHeader(header,value) 设置请求头信息

header请求头名称

value 请求头的值

send(content) 发送Ajax请求

content 如果get请求,此参数为null;如果post请求。此参数就是要传递的数据

1.4同步与异步

同步:只能做一件事情

异步:同时可以做多件事情

二、发送GET请求

1、记口诀(五步走)

第一步:创建Ajax对象 var xhr = createXhr();

第二步:设置回调函数 xhr.onreadystatechange = function() {}

第三步:初始化Ajax对象 xhr.open(‘get’,url);

第四步:发送Ajax请求 xhr.send(null);

第五步:判断与执行 回调函数内部判断if(xhr.readyState == 4) {}

返回结果:字符串,使用xhr.responseText

​ XML数据,使用xhr.responseXML

下面是注册页面检测是否重名的实例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head>
<body><input type="text" id="inp"><span id='tip'></span><br><input type="button" value="注册">
</body><script>//封装进函数供其他程序调用function cXHR(){try{return new XMLHttpRequest()}catch(e){};try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){};}
</script>
<script type="text/javascript">var inp = document.getElementById('inp');var name = inp.value;inp.onblur = function(){var name = this.value;// 1创建Ajax对象var xhr = cXHR();//2.设置回调函数xhr.onreadystatechange = function(){//5.判断与执行if(xhr.readyState == 4){if(xhr.responseText == 1){var t = "<font color='red'>用户名已经被注册</font>";}else{var t = "<font color='green'>恭喜用户名可用</font>";}document.getElementById('tip').innerHTML = t;}}//3初始化Ajaxxhr.open('get','1.1.php?name='+name);//4发送Ajax请求xhr.send();}
</script>
</html>

PHP后台代码:

<?php
header('content-type:text/html;charset=utf-8');
$name = $_GET['name'];
mysql_connect('localhost','root','root');
mysql_query('use itcast');
mysql_query('set names utf8');$sql = "SELECT id FROM student WHERE name='$name'";
$r = mysql_query($sql);
$res = mysql_fetch_assoc($r);if($res){echo 1;
}else{echo 0;
}

三、IE缓存问题


当使用IE浏览器时,相同一个URL发送多次请求时,浏览器会将页面内容缓存起来,会产生缓存问题;

缓存设计的初衷是以前网速较慢为了加快网站的响应速度。

解决方案:

  1. URL重写
    使用随机数产生不同的URL地址
    xhr.open('get','user.php?username='+username+'&_='+Math.random());

    使用时间戳解决缓存问题

    xhr.open('get','user.php?username='+username+'&_='+new Date().getTime());

  2. 设置响应头禁用客户端缓存

    header('Cache-Control:no-cache');
  3. 设置请求头的缓存时间

    xhr.setRequestHeader('If-Modified_Since','0');

    四、Ajax发送POST请求


Ajax中get和post的区别

1.传参方式不同:GET在地址尾部使用?拼接多个参数
POST使用**send()**方法传递参数, 在请求空白行的位置传递参数的2.请求头
POST必须设置请求头xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');GET不用设置3. 参数类型GET只能传输简单类型:数字、字符串POST除了数字和字符串外,还可以传输二进制数据

POST请求

1、记口诀(六步走)

第一步:创建Ajax对象 var xhr = createXhr();

第二步:设置回调函数 xhr.onreadystatechange = function() {}

第三步:初始化Ajax对象 xhr.open(‘post’,url);

第四步:xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');

第五步:发送Ajax请求 xhr.send(data);

第六步:判断与执行 回调函数内部判断if(xhr.readyState == 4) {}

将上面案例代码,改变一下就可以了


//请求地址
var url = '03-1.php';
//open参数为post
xhr.open('post',url);
//设置请求头
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
//设置post请求参数值
xhr.send('names='+inp.value);

Ajax 实现无刷新上传文件

文件上传原理 , 浏览器客户端将文件载入并解析为二进制数据,
然后通过HTTP协议将数据发送到服务器端, 文件上传就已经成功了;
但是对于服务器来说, 接收到的文件会放到系统缓存中,
我们需要使用PHP的move_uploaded_file函数将文件移至我们设置好的目录下, 并对缓存文件重新命名;
完成移动操作后, 我们就可以在服务器端看见上传后的文件了;
想要使用Ajax完成文件上传, 首先我们要学会, Ajax作为客户端如何将文件读入并解析为二进制数据;
HTML5为我们提供了 FormData 对象:
通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对。 它可以更灵活方便的发送表单数据, 因为可以独立于表单使用。
如果你把表单的编码类型设置为multipart/form-data, 则通过FormData传输的数据格式和表单通过submit() 方法传输的数据格式相同;

FormData 手册
https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects

<script>// 原生上传var form_element = document.querySelector('form');document.querySelector('#btn').onclick = function(){// 获取所有表单数据var data = new FormData(form_element);// ajax上传var xhr = new XMLHttpRequest();xhr.onreadystatechange = function(){if(xhr.readyState == 4 && xhr.status == 200){if(xhr.responseText == 1){alert('上传成功');}else{alert('上传失败');}}}xhr.open('post','upload.php');xhr.send(data);}
</script>

【3分钟带你学】Ajax相关推荐

  1. 30 分钟带你学透快应用界面开发的最正确姿势

    这篇文章适合快速开发快应用,提高效率,不管你是资深的前端开发,还是刚入门快应用开发的菜鸟,本文都值得你一读.通过阅读本文,我相信一定能节省你的时间,少走很多弯路,将主要的精力放在项目的开发中来. 入门 ...

  2. 5分钟带你学懂ROC曲线

    目录 ROC 混淆矩阵: 定义 生成ROC曲线 生成实例 AUC(Area under ROC Curve) AUC对模型性能简单评估 ROC曲线的优势 ROC ROC全称是受试者工作特征(Recei ...

  3. 5分钟带你读「大清」微积分!160多年前清朝数学家撰写文言文版高等数学

     视学算法报道   编辑:小咸鱼 好困 [新智元导读]你有见过160多年前清朝数学家写的微积分书吗?这可能是最难懂的高数教材了,堪称天书!近日,网上流传着一本清朝的微积分课本,其中的所有数学表达式都是 ...

  4. c++ map用法_Python专题——五分钟带你了解map、reduce和filter

    点击上方蓝字,和我一起学技术.今天是Python专题第6篇文章,给大家介绍的是Python当中三个非常神奇的方法:map.reduce和filter.不知道大家看到map和reduce的时候有没有什么 ...

  5. 他在 B 站有 140 万粉丝,今天来免费带你学 Linux 了!

    大家都知道 在这个时代 技术就是金钱 会 PS.AI 可以做设计 会 Pr.AE 可以剪辑视频 会编程可以开发程序 -- 在这些技能中学会一个都能让你收入颇丰但很多人都不知道在哪系统学习小编今天在 B ...

  6. 依赖 netty spring_十分钟带你了解Spring的七大知识点,程序员必了解

    Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶.它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflo ...

  7. 10分钟带你了解python_10分钟Python入门系列教程及学习资源分享

    本期分享笔记内容 归档此前入门教程文章,方便查看 10分钟带你Python入门的特点 简单谈下如何寻找Python学习资源 关于分享Python学习资源的分享问题 本人对于Python学习创建了一个小 ...

  8. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

  9. 小甲鱼老师《带你学C带你飞》的后续课程补充

    小甲鱼老师的<带你学C带你飞>系列之前有预告,说有机器人电子制作的续集,但是这么久了还是没有等到,博主在这里根据自己的学习经历,推荐一些学习的资料,可以为小甲鱼老师填一下坑,读者可根据自己 ...

  10. 【逗老师带你学IT】PRTG获取HUAWEI FusionServer iBMC传感器状态

    本文介绍如何使PRTG获取HUAWEI FusionServer iBMC传感器状态.以及衍生出如何通过ipmi通用协议监控所有服务器的带外管理状态. 本文主要涉及的技术点: 1.服务器ipmi命令行 ...

最新文章

  1. 关于MetaAPI问题CSDN给的邮件回复
  2. .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5
  3. hadoop的python框架指南_Python之——用Mrjob框架编写Hadoop MapReduce程序(基于Hadoop 2.5.2)...
  4. 视频生产环境下的音视频解决方案
  5. Jeecg-Boot上传附件异常问题处理
  6. Windows和Mac安装JDK及环境变量配置
  7. TCP/IP网络编程(2)
  8. (best!)JAVA中文字符编码问题详解
  9. 2019.01.01洛谷 P4725/P4726 多项式对数/指数函数(牛顿迭代)
  10. java keytool工具详解
  11. power bi 商业智能相关书籍介绍
  12. 有点理解Google为什么要退出中国市场了
  13. XTDRONE:ego_planner三维运动规划
  14. 阿里云域名购买与备案,解析使用教程
  15. 微信小程序获取openid(用户唯一身份识别)
  16. BootStrap常用的元素与样式
  17. sql查询in条件超过1000条解决方案
  18. 清华大学计算机学院曹伦郗,四川文理第一名填报北大 高分“学霸”们最后选了啥专业...
  19. 原生JS无缝轮播图(左右切换、导航跟随)
  20. 微信小程序之滔搏运动

热门文章

  1. 个人信息保护中,APP经常调用的Android类和方法
  2. 26岁,2020 - 观《人生七年》
  3. cdr 表格自动填充文字_6个excel表格制作技巧,熟练掌握,工作效率加倍
  4. 【PP那些事儿】生产模式-面向订单生产
  5. ps-半透明图片抠图
  6. 2018谷歌大会android,谷歌召开2018中国开发者大会,带来了Android 9多项更新
  7. 利用计算机及网络系统支持考试的方式是,2012年7月全国自主考试(网络操作系统)真题...
  8. 观后感 --《当幸福来敲门》和《赢在中国》
  9. 盖茨再捐200亿美元,谷歌云转投ARM,推特员工因马斯克遭CEO警告,今日更多大新闻在此...
  10. 计算机系技能比赛黑板报,技能成就梦想黑板报图文