接上一篇 Ajax基础知识(一)
在上一篇博客里,抛弃了VS中新建aspx页面,拖个button写上C#代码的方式。使用ajax的方式,异步向服务器请求数据。我们让服务器只简单的返回一个“Hello World”字符串给客户端。实例代码也放出,但是对于掌握Ajax到底是个什么东西,还有些疑惑点。首先,那个JS函数GetInfoByAjax里面的XmlHttpRequest是个什么东西,为什么open里面放的是get,回调函数这些都是什么。
一、XmlHttpRequest
这是一个对象,所有现代浏览器都支持这个对象,用于在后台与服务器交换数据,它提供了在网页加载后与服务器进行通信的方法(所谓的异步加载数据)。在IE5和IE6时代,使用的叫ActiveXObject。在上一篇的JS代码中,GetInfoByAjax首先就实例化了一个XmlHttpRequest对象。当然,那样的代码是略有问题的,至少在IE5、6下是会报错的。对GetInfoByAjax进行修改,增加对浏览器的判断。
function GetInfoByAjax() {
//创建xmlHttpRequest对象
var xmlHttp; if (window.XMLHttpRequest) { //判断浏览器是否支持XMLHttpRequst
xmlHttp = new XMLHttpRequest();
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} //配置XmlHttpRequest对象
xmlHttp.open("get", "Handlers/SimpleAjax.ashx");
//设置回调函数
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState = 4 && xmlHttp.status == 200) {
document.getElementById("DataDiv").innerHTML = xmlHttp.responseText;
}
}
//发送请求
xmlHttp.send(null);
}
二、open里面的参数是什么
创建完xmlHttp对象后,就该使用它了。其实它就是去向服务器请求自己需要的文档,如果知道这个文档存放的位置,就可以把这个地址(URL)写上去就好了。至于请求的文件是什么,可以是纯文本文件,xml文件,html文件等等(Handler/SimpleAjax.ashx则是我们请求的文件)。当然,那是向服务器请求一个静态的文件,当我们需要向服务器请求的文件并不是一成不变,而是需要服务器进行处理的文件呢。可能还会需要向服务器发送点东西,服务器根据接收到的内容再返回相应的内容给客户端。再拿省市区联动的例子说事,当我在浏览器上选择了自己所在的省,比如吉林,那服务器得根据收到的省去查询这个省下的市,把这些市返回给我,而不是又一股脑把所有省下的市都抛给了我。这个get就是向服务器发送数据的方式,另一种方式叫post。二者的区别在于,get会将发送的数据显示在浏览器的地址栏上(经常会看到地址栏上显示?username=xxxx&email=XXXX),对于发送数据量少,且安全性要求不高的使用get发送方便。post发送的数据大小不限,且不明显显示在地址栏上。比较遗憾,GetInfoByAjax方法并未向服务器发送任何数据,假设向服务器post了一个用户名的数据,则相应的代码需要修改成如下。
function GetInfoByAjax() {
//创建xmlHttpRequest对象
var xmlHttp;
var userName = 'user123';
if (window.XMLHttpRequest) { //判断浏览器是否支持XMLHttpRequst
xmlHttp = new XMLHttpRequest();
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} //配置XmlHttpRequest对象
xmlHttp.open("post", "Handlers/SimpleAjax.ashx");
//设置请求头
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//设置回调函数
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState = 4 && xmlHttp.status == 200) {
document.getElementById("DataDiv").innerHTML = xmlHttp.responseText;
}
}
//发送请求
xmlHttp.send("username=" + userName);
}
三、回调函数
回想一下上一篇啰嗦的浏览网页发生的过程,现在向服务器请求的事情都干完了。服务器也把该准备的内容准备好了,发给客户端以后怎么办呢?这里的回调函数,干的就是把服务器根据我请求的内容返回的内容给更新到当前的页面上。XmlHttpRequest有三个非常重要的属性:onreadystatechange、status、readyState。readyState保存了XmlHttpRequest的状态,每当它的值变化,就会触发onreadystatechange事件。
属性 | 描述 |
---|---|
onreadystatechange | 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 |
readyState |
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
|
status |
200: "OK" 404: 未找到页面 |
从上面的表中看到,GetInfoByAjax中onreadystatechange指定到一个匿名函数中,该函数判断XmlHttpRequest对象的状态是已经请求完成,响应就绪。则把返回的内容写到了页面中的div中。这样,这个使用Ajax的过程就差不多完成了。下一篇,会完成上一篇中提到的省市区三级联动的程序。
Reference: W3school
版权声明:本文为博主原创文章,未经博主允许不得转载。
Ajax基础知识(二)的更多相关文章
-
Ajax基础知识 浅析(含php基础语法知识)
1.php基础语法 后缀名为.php的文件 (1) echo 向页面中输入字符串 <?php 所有php相关代码都要写在<?php ?>这个标签之中 echo &q ...
-
Ajax基础知识《一》
对于网站开发人员,一定不会陌生的Ajax技术,本篇就让我们认识一下它,或许在日后的开发过程中我们就可以使用到.Ajax在那方面使用的比较多呢?答案:表单注册,传统的表单注册,有时需要填写大量的信息,当 ...
-
java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
-
菜鸟脱壳之脱壳的基础知识(二) ——DUMP的原理
菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即Entry Point,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向O ...
-
Dapper基础知识二
在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. 2,如何使用Dapper? 首先Dapper是支持多种数据库的 ...
-
python基础知识(二)
python基础知识(二) 字符串格式化 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 print(' %s is boy'%('tom')) ----> ...
-
11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
-
Java基础知识二次学习--第三章 面向对象
第三章 面向对象 时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...
-
Java基础知识二次学习-- 第一章 java基础
基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...
随机推荐
-
SQLSERVER建立MYSQL连接服务器
1. 在SQL SERVER端安装MYSQL的ODBC驱动 2. 在ODBC数据源添加MYSQL(控制面板\所有控制面板项\管理工具) 在用户DSN 和系统DSN添加配置驱动程序 注:字符集一定要和M ...
-
ci中如何得到配置的url
$this->load->helper('url'); 然后,你可以用它查询并返回设置在config.php文件中的site和/或base URL: echo site_url(); ec ...
-
Java学习之路(三)
1:面向对象
-
zabbix 布署实践【3 proxy安装】
使用openstack在生产环境创建的一台虚拟机 环境 CentOS7 4核4G内存40G硬盘 IP:10.120.150.150 镜像默认关闭防火墙,selinux ,NetworkManage ...
-
OpenLayer 3 鹰眼控件和全屏显示
<body> <div id="map"></div> <script> var map=new ol.Map({ target:& ...
-
Unable to handle &#39;index&#39; format version &#39;2&#39;, please update rosdistro的解决办法
之前安装的ROS是Fuerte版本的,好久没有更新,不知不觉又出来了好几个新的版本,今天删除了Fuerte,计划安装Hydro版本的尝尝新,按照官网的安装流程,很快就可以把新版本安装上去了,但是在&q ...
-
dotnet core开源博客系统XBlog介绍
XBlog是dotnet core平台下的个人博客开源系统,它只需要通过Copy的方式即可以部署到Linux和windows系统中:如果你有安全证书那只需要简单配置一下即可提供安全的Https服务.接 ...
-
QGE 在齐次 Besov 空间中的准则
在 [Zhang, Zujin. On the blow-up criterion for the quasi-geostrophic equations in homogeneous Besov s ...
-
S3T mongodb GUI
下载 cd ~/Downloads wget https://download.studio3t.com/studio-3t/linux/2019.2.1/studio-3t-linux-x64.ta ...
-
使用Ajax long polling实现简单的聊天程序
关于web实时通信,通常使用长轮询或这长连接方式进行实现. 为了能够实际体会长轮询,通过Ajax长轮询实现了一个简单的聊天程序,在此作为笔记. 长轮询 传统的轮询方式是,客户端定时(一般使用setIn ...