接上一篇  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. 初探Java8中的HashMap(转)

    HashMap是我们最常用的集合之一,同时Java8也提升了HashMap的性能.本着学习的原则,在这探讨一下HashMap. 原理 简单讲解下HashMap的原理:HashMap基于Hash算法,我 ...

  2. J2SE基础:4.面向对象的特性一

    面向对象的特性 封装 继承多态 封装: 定义: 通过对象的封装,实现了模块化和信息隐藏. 通过对类的成员施以一定的訪问权限,实现了类中成员 的信息隐藏 注意点: 对象自已该做的一些事情与方法不能交与其 ...

  3. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  4. 使用jni技术进行android应用签名信息核查及敏感信息保护

           近期业余时间写了一款应用<摇啊摇>,安智.安卓.360等几个应用商店已经陆续审核通过并上线.从有想法到终于将产品做出来并公布,断断续续花了近二个半月的业余时间,整体来讲还算顺 ...

  5. CentOS6.5解压缩文件.tar.gz .war .zip

    拉开拉链.tar.gz文件: tar -zxvf web.tar.gz tar将文件解压缩到一个指定的文件夹. 拉开拉链.war .zip文件到指定的文件夹: unzip web.war -d web ...

  6. git 仓库

    从 Git 删除文件 rm test.txt git rm test.txt 加入远程仓库 $ git remote origin $ git remote add pb git://github.c ...

  7. IOS设计模式学习(11)中介者

    1 前言 面向对象的设计鼓励把行为分散到不同对象中.这种分散可能导致对象之间的相互关联.在最糟糕的情况下,所有对象都彼此了解并相互操作.但是增加的相互关联又减少了获得的益处.增加的关联似的对象很难或不 ...

  8. JAVA开源爬虫,WebCollector,使用方便,有接口。

    假设你想下载整个网站内容爬行动物,我不希望配置heritrix复杂的爬行动物,要选择WebCollector.项目github一个不断更新. github源地址:https://github.com/ ...

  9. iOS_数据库3_sqlite3基本操作

    终于效果图: Sqlite3函数总结  1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据 ...

  10. PHP情人:p十几天来学习hp第一天

    我这里是暂时的 Apache web server 和 MY SQL 如WEB,在php-4.3.3下的环境做的程序.当然要简单的构建和訪问查看数据库 PHPMYADMIN 不可少.  以下简介一下P ...