一、同步交互与异步交互的概念:

* 同步交互:客户端向服务器端发送请求,到服务器端进行响应,这个过程中,用户不能做任何其他事情(只能等待响应完才能继续其他请求).

* 异步交互:客户端向服务器端发送请求,直到服务器端进行响应,这个过程中,用户可以做其他任何事情(不等);

同步与异步的区别:

* 同步交互

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异步请求基础知识的更多相关文章

  1. 关于我们ajax异步请求的方法与知识

      做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school ...

  2. ajax异步请求

    做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...

  3. ajax异步请求302

    我们知道,只有请求成功ajax才会进行回调处理,具体状态码为 status >= 200 && status < 300 || status === 304; 这一点通过查 ...

  4. 原生ajax的请求过程

    原生ajax的请求过程 创建全平台兼容的XMLHttpRequest对象: function getXHR(){ var xhr = null; if(window.XMLHttpRequest) { ...

  5. 黑马eesy_15 Vue:03.生命周期与ajax异步请求

    黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) vue的生命周期与ajax异步请求 1.Vue的 ...

  6. spring HandlerInterceptorAdapter拦截ajax异步请求,报错ERR_INCOMPLETE_CHUNKED_ENCODING

    话不多说,直接上正文. 异常信息: Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING 问题描述: 该异常是在页面发送ajax请 ...

  7. jquery Ajax异步请求之session

    写了一个脚本,如下: $(function () { $("#btnVcode").click(function () { var receiveMobile = $(" ...

  8. ajax异步请求Response.Redirect重定向

    一个ajax异步请求报错->捕获异常->重定向错误提示页面.  一个简单的流程 结果一直搞不定.重定向无效.各种百度之. 后来突然想起 ajax的请求是不能在后台重定向的. 如果硬要重定向 ...

  9. jquery的ajax异步请求接收返回json数据

    http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...

随机推荐

  1. webstorm快捷键收集【转发】

    WebStorm快捷键收集   1.webstorm快捷键: IntelliJ-Idea 的快捷键 Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*…*/ ) Shift+F6 重构- ...

  2. [第一阶段] Python学习

    首先声明一下,我这个学习计划是关于学习Python的. 先说一下起因:我自己接触Python算是很久了,目前仍没学会,很失败,很惭愧.所以这次一方面简单分析一下自学会碰到的问题:另一方便,我想到了一种 ...

  3. grunt轻松入门

    项目目录,js源文件 gruntest Gruntfile.js package.json -- js ext community_plugin.js glogin_frm_cover.js iLog ...

  4. hdu1269强连通分量入门题

    https://vjudge.net/contest/156688#problem 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<= ...

  5. 记录——excel导出lua工具(python实现)

    项目需要一个从excel导出lua配置表的工具,之前的工具是主程写的,效率极差,i7 CPU 一次全部导出要花掉1个多小时.匪夷所思的是,这么渣的效率,居然用了整整一年.当 然,中途有人反映效率差,主 ...

  6. zabbix安装配置

    实验环境 主机名 操作系统版本 IP地址 安装软件 console CentOS 7.0 114.55.29.246 Httpd.Nginx.MySQL.Zabbix log1 CentOS 7.0 ...

  7. 如何应对苹果app 的ipv6 时代?腾讯专家教您进行环境改造

    WeTest 导读 WWDC2015苹果宣布在ios9支持纯IPv6的网络服务,并且要求2016年提交到app store的应用必须兼容纯IPv6的网络,要求适配的系统版本是ios9以上(包括ios9 ...

  8. CentOS 7.2下安装Mono 5.0

    微软Build2017大会期间.NET领域的.NET core之外,就是Visual Studio For Mac,大家都知道Visual Studio For Mac 是基于Mono运行的,Mono ...

  9. java面向对象--抽象类和接口

    如果某个父类只知道其子类应该包含哪些方法,但无法知道如何实现这些方法,同时要使用多态的特性,怎么办? 抽象方法:关键字abstract允许在一个类中创建一个或多个没有方法体的方法--只提供方法签名,但 ...

  10. SMD晶振发展和智能手机的普及总是惊人的相似!

    其实触屏手机在2002年前后就已经出现了,但那个时候的触屏手机不算是现在的这种智能手机,有人说最早发行触屏手机的是诺基亚,也有人说是苹果还有人认为摩托罗拉.总之众说纷纭,小编那里还太小也并不是很了解, ...