接上一篇  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 发生变化。

  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接收
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪
status

200: "OK"

404: 未找到页面

从上面的表中看到,GetInfoByAjax中onreadystatechange指定到一个匿名函数中,该函数判断XmlHttpRequest对象的状态是已经请求完成,响应就绪。则把返回的内容写到了页面中的div中。这样,这个使用Ajax的过程就差不多完成了。下一篇,会完成上一篇中提到的省市区三级联动的程序。

Reference: W3school

版权声明:本文为博主原创文章,未经博主允许不得转载。

Ajax基础知识(二)的更多相关文章

  1. Ajax基础知识 浅析(含php基础语法知识)

    1.php基础语法    后缀名为.php的文件 (1) echo   向页面中输入字符串  <?php    所有php相关代码都要写在<?php ?>这个标签之中 echo &q ...

  2. Ajax基础知识《一》

    对于网站开发人员,一定不会陌生的Ajax技术,本篇就让我们认识一下它,或许在日后的开发过程中我们就可以使用到.Ajax在那方面使用的比较多呢?答案:表单注册,传统的表单注册,有时需要填写大量的信息,当 ...

  3. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  4. 菜鸟脱壳之脱壳的基础知识(二) ——DUMP的原理

    菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即Entry Point,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向O ...

  5. Dapper基础知识二

    在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. 2,如何使用Dapper?     首先Dapper是支持多种数据库的 ...

  6. python基础知识(二)

    python基础知识(二) 字符串格式化 ​ 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 ​ print(' %s is boy'%('tom')) ----> ...

  7. 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  8. Java基础知识二次学习--第三章 面向对象

    第三章 面向对象   时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...

  9. Java基础知识二次学习-- 第一章 java基础

    基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...

随机推荐

  1. Ubuntu14.04 用 CrossOver 安装 TMQQ2013

    Crossover 是 wine 的优化+商业版本号 ,  免去了wine的繁琐配置,让Ubuntu安装windows软件很easy..... 部分移植的软件还有官方的维护,执行效果也比較好..... ...

  2. PHP+Mysql————表单数据插入数据库及数据提取

    站点在进行新用户注冊时,都会将用户的注冊信息存入数据库中,须要的时候再进行提取.今天写了一个简单的实例. 主要完毕下面几点功能: (1)用户进行注冊,实现password反复确认,验证码校对功能. ( ...

  3. Sql Server函数全解<四>日期和时间函数

    原文:Sql Server函数全解<四>日期和时间函数   日期和时间函数主要用来处理日期和时间值,本篇主要介绍各种日期和时间函数的功能和用法,一般的日期函数除了使用date类型的参数外, ...

  4. Ubuntu下轻松切换GDM, LightDM , KDM

    如果已经安装LightDM和GDM登录显示器.那么在Ubuntu下怎么在各种DM间任意切换呢? 举例: 以切换到GDM为例,打开终端,使用命令: sudo dpkg-reconfigure gdm 接 ...

  5. Java执行批处理.bat文件(有问题???求高手帮忙解答!!!)

                           Java执行批处理.bat文件(有问题???求高手帮忙解答!!!) 在项目开发中常常都会遇到需要在代码中调用批处理bat脚本,把自己在项目中遇到过的总结下 ...

  6. 苹果Swift编程语言新手教程【中文版】

    文件夹 1 简单介绍 2 Swift入门 3 简单值 4 控制流 5 函数与闭包 6 对象与类 7 枚举与结构 1 简单介绍 Swift是供iOS和OS X应用编程的新编程语言,基于C和Objecti ...

  7. LeanCloud获取最近会话列表和获取最后一条聊天记录

    最近公司有项目需要集成IM聊天功能,领导要求用LeanCloud集成,搞不出来就要背包滚蛋啊,没办法只能硬着头皮搞了. 刚拿到官方提供的demo感觉:嗯,不错.图片语音啥的都有了,但尼玛这还不够啊,还 ...

  8. ZooKeeper实践方案:(7) 分布式锁

    1.基本介绍 分布式锁是控制分布式系统之间同步訪问共享资源的一种方式,须要相互排斥来防止彼此干扰来保证一致性. 利用Zookeeper的强一致性能够完毕锁服务.Zookeeper的官方文档是列举了两种 ...

  9. Redis时延问题

    单线程你别阻塞,Redis时延问题分析及应对 内容目录: 耗时长的命令造成阻塞 fork产生的阻塞 持久化造成的阻塞 单线程你别阻塞,Redis时延问题分析及应对 Redis的事件循环在一个线程中处理 ...

  10. 卓尼斯ZT-180点评

    卓尼斯ZT-180点评    ——我们出差,使用10”上网本发布,没有图片.并写冲忙.遗憾的不足之处. 一.购买 1.由于旅游.不想拿那台14"笔记本,台平板电脑.当时,选择的对象有维智A8 ...