原生ajax异步请求基础知识
一、同步交互与异步交互的概念:
* 同步交互:客户端向服务器端发送请求,到服务器端进行响应,这个过程中,用户不能做任何其他事情(只能等待响应完才能继续其他请求).
* 异步交互:客户端向服务器端发送请求,直到服务器端进行响应,这个过程中,用户可以做其他任何事情(不等);
同步与异步的区别:
* 同步交互
1、执行速度相对比较慢
2、响应的是完整的HTML页面
* 异步交互
1、 执行速度相对比较快
2、 响应的是部分数据
二、AJAX的概念:(Asynchronous JavaScript and Xml)--直译中文 - javascript和XML的异步
(简单理解-->就是客户端与服务器端进行交互,而无需刷新当前页面的技术,称之为Ajax)
* Ajax实现的是B/S架构下的异步交互
* 实现异步交互的技术-- <iframe src="">元素
* Ajax具有核心对象-- XMLHttpRequest对象
三、实现Ajax的步骤
* 创建XMLHttpRequest对象
* 注册监听
* 建立连接
* 发送请求
实现Ajax的六步是什么?(不标准)
* 创建XMLHttpRequest对象
* 建立连接
* 发送请求
* 注册监听 - onreadystatechange事件
* 获取服务器端的通信状态 - readyState
* 获取服务器端的状态码
1、创建XMLHttpRequest对象的语法:
function getXhr()
{
// 声明XMLHttpRequest对象
var xhr = null;
// 根据浏览器的不同情况进行创建
if(window.XMLHttpRequest)
{// 表示除IE外的其他浏览器
xhr = new XMLHttpRequest();
}else{ // 表示IE浏览器下创建
xhr = new ActiveXObject('Microsoft.XMLHttp');
}
return xhr;
}
// 调用getXhr()
var xhr = getXhr();
2、建立连接:
* 使用XMLHttpRequest对象的open(method,url)方法
* 作用 - 与服务器端建立连接
*参数含义:
* method - 设置当前请求的类型get/post
* url - 设置当前请求的地址
3、向服务器端发送请求:
*使用XMLHttpRequest对象的send(请求参数)方法:
* 请求参数的格式 - key=value
注意:* GET与POST的区别
* GET请求类型
* send()方法不起作用,但是不能被省略;语法:xhr.send(null);
* 请求参数 -在url后面写?key=value
* POST请求类型
* send()方法起作用,在send()方法被调用前,使用setRequestHeader()方法设置请求头信息
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
4、注册监听:
* onreadystatechange事件
* 作用 - 监听服务器端的通信状态改变
xhr.onreadystatechange=function()
{
}
5、获取服务器端的通信状态:
*使用核心对象属性readyState、status
* readyState - 表示当前服务器端的通信状态
* 0 - (服务器端)尚未初始化
* 1 - (服务器端)正在接收
* 2 - (服务器端)接收完毕
* 3 - (服务器端)正在响应
* 4 - (服务器端)响应完毕
* status --表示当前服务器端的状态码
* 200 - 请求成功
* 404 - 网页找不到(请求路径不正确)
* 500 - 服务器端错误
if(xhr.readyState==4&&xhr.status==200)
{
}
6、获取响应数据:
使用XMLHttpRequest对象的responseText属性,接收服务器端的响应数据;
var data=xhr.responseText;
4~6步就是接收服务器端响应数据的步骤:
* 使用XMLHttpRequest对象的onreadystatechange事件,监听服务器端的通信状态
* 使用XMLHttpRequest对象的readyState属性,判断服务器端的当前状态(4--响应完毕)
* 使用XMLHttpRequest对象的status属性,判断服务器端的状态码(200--表示请求成功)
* 使用XMLHttpRequest对象的responseText属性,接收服务器端的响应数据
demo:(这里省份也可以放在服务器端,通过 window.onload=function(){}在页面加载完后请求服务器关于省份的信息,方法步骤按照上面的4大步写就行)

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ajax02_二级联动</title>
</head>
<body>
<form>
<select id="province">
<option>请选择</option>
</select>
<select id="city">
<option>请选择</option>
</select>
</form>
<script>
var se_province=document.getElementById("province");
var Pro_city=document.getElementById("city");
//加载页面后显示省份列表内容
window.onload=function(){
var option=province.getElementsByTagName("option");
var arrayProvice=["北京市","广东省","四川省","湖南省","云南省"];
for(var i=0 ;i<arrayProvice.length;i++)
{ //新建option标签
var option=document.createElement("option");
//把数组内容放入option里面
var textNode=document.createTextNode(arrayProvice[i]);
option.appendChild(textNode);
//给select标签添加option
se_province.appendChild(option);
}
} se_province.onchange=function(){
//先为city元素的option文本内容情况,防止在多次触发onchange事件时出现城市列表重复添加
var opts=Pro_city.getElementsByTagName("option");
//console.log(opts);
for(var j=opts.length-1;j>0;j--)
{
Pro_city.removeChild(opts[j]);
}
//alert(se_province.value); //判断:如果省份value值是请选择就不会向服务器发送请求,避免生成多余的option标签
if(se_province.value !="请选择"){
//执行ajax异步请求
var xhr=getXhr();
xhr.open("post","ajax02.php",true);
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
xhr.send("provcince="+se_province.value);
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200)
//接收服务器端的数据内容
var data=xhr.responseText;//这里data是字符串
var citydata=data.split(",");//截断字符串变成数组
//console.log(data); for(var i=0;i<citydata.length;i++){
//新建option标签
var option=document.createElement("option");
//把数组内容放入option里面
var textNode=document.createTextNode(citydata[i]);
option.appendChild(textNode);
//给select标签添加option
Pro_city.appendChild(option); }
}
} } //创建XMLHTTPRequest对象, XMLHttpRequest 用于在后台与服务器交换数据
function getXhr(){
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp;
}
</script>
</body>
</html>
ajax02.php文件代码:
<?php
//接收客户端发送的省份信息
$province=$_POST["provcince"]; switch($province){
case "北京市":echo "朝阳区,海淀区,通州区,怀柔区";
break;
case "广东省":echo "深圳市,东莞市,广州市,佛山市";
break;
case "湖南省":echo "长沙市,湘潭市,邵阳市,岳阳市";
break;
case "四川省":echo "成都市,南充市,绵阳市,广元市";
break;
case "云南省":echo "昆明市,曲靖市,玉溪市,楚雄市";
break;
}
?>
<PS:转载请注明出处!>
原生ajax异步请求基础知识的更多相关文章
- 关于我们ajax异步请求的方法与知识
做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school ...
- ajax异步请求
做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...
- ajax异步请求302
我们知道,只有请求成功ajax才会进行回调处理,具体状态码为 status >= 200 && status < 300 || status === 304; 这一点通过查 ...
- 原生ajax的请求过程
原生ajax的请求过程 创建全平台兼容的XMLHttpRequest对象: function getXHR(){ var xhr = null; if(window.XMLHttpRequest) { ...
- 黑马eesy_15 Vue:03.生命周期与ajax异步请求
黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) vue的生命周期与ajax异步请求 1.Vue的 ...
- spring HandlerInterceptorAdapter拦截ajax异步请求,报错ERR_INCOMPLETE_CHUNKED_ENCODING
话不多说,直接上正文. 异常信息: Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING 问题描述: 该异常是在页面发送ajax请 ...
- jquery Ajax异步请求之session
写了一个脚本,如下: $(function () { $("#btnVcode").click(function () { var receiveMobile = $(" ...
- ajax异步请求Response.Redirect重定向
一个ajax异步请求报错->捕获异常->重定向错误提示页面. 一个简单的流程 结果一直搞不定.重定向无效.各种百度之. 后来突然想起 ajax的请求是不能在后台重定向的. 如果硬要重定向 ...
- jquery的ajax异步请求接收返回json数据
http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...
随机推荐
- APP反编译第一课《如何找到核心代码》
相信很多人都应该会去接触APP反编译,本小七给大家带来入门级别套路,自己也在慢慢摸索学习,一起成长吧.第一步,反编译需要的工具有:一.java环境,其实这里你只要安装了burp就不用管这个的二.apk ...
- 进程间通信系列 之 socket套接字及其实例
进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ...
- Display:table;妙用,使得左右元素高度相同
我们在设计网页的时候,为了左右能够分明一点,我们经常会在左边元素弄一个border-right,但是出现一个问题,如果左边高度比较小,这根线就短了,下面空了一部分,反正如果在右边的元素弄一个borde ...
- 基于vue2.0前端组件库element中 el-form表单 自定义验证填坑
eleme写的基于vue2.0的前端组件库: http://element.eleme.io 我在平时使用过程中,遇到的问题. 自定义表单验证出坑: 1: validate/resetFields 未 ...
- 被低估的选手 - JavaFx
被低估的选手 - JavaFx 1.MFC(Visual C++) 个人不是很喜欢这个框架,太多系统定义的东西,就像无底洞,学都学不完,这个东西需要你有比较强的记忆力,并且能融会贯通里面很多预定义的功 ...
- pygame开发滑雪者游戏
pygame开发滑雪者游戏 一.实验说明 下述介绍为实验楼默认环境,如果您使用的是定制环境,请修改成您自己的环境介绍. 1. 环境登录 无需密码自动登录,系统用户名 shiyanlou,该用户具备 s ...
- java中的GC(gabage collection)如何工作
1. “引用记数(reference counting)”是一种简单但速度很慢的垃圾回收技术.每个对象都含有一个引用记数器,当有引用连接至对象时,引用计数加1.当引用离开作用域或被置 为null时,引 ...
- scala 异常处理机制
有经验的码农都知道,程序开发的差不多的时候,为了提高程序的稳健性,是一定要加上异常处理机制的 在scala中,用try/catch/finally实现该功能,这个在我的博客,数字转汉字小工具中有体现, ...
- ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统
为什么使用 Jwt 最近,移动开发的劲头越来越足,学校搞的各种比赛都需要用手机 APP 来撑场面,所以,作为写后端的,很有必要改进一下以往的基于 Session 的身份认证方式了,理由如下: 移动端经 ...
- 门面(Facade)模式
门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用. 医院的例子 现代的软件系统都是比较复杂的,设计师处理复杂系统的一个 ...