AJAX 用法总结

qq_15756219 2018-01-20 11:20:54
加精
1、ajax是什么?
ajax: asynchronous javascript and xml: 异步的javascript和xml。
ajax是一种用来改善用户体验的技术,其本质是利用浏览器内置的一种特殊的对象(XMLHttpRequest)异步(即发送请求时,浏览器不会销毁当前页面,用户可以继续在当前页面做其它的操作)的向服务器发送请求,并且利用服务器返回的数据(不再是一个完整的页面,只是部分的数据,一般使用文本或者xml返回)来部分更新当前页面。
使用ajax技术之后,页面无刷新,并且不打断用户的操作。
2、ajax对象
(1)如何获得ajax对象?
XMLHttpRequest并没有标准化,要区分浏览器:
function getXhr()
{
var xhr;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest(); // 非ie浏览器
}else{
xhr = new ActiveXObject('Microsoft.XMLHttp'); // ie浏览器
}
}
(2)ajax对象的属性
a. onreadystatechange: 绑订一个事件处理函数(即: 注册一个监听器)
当ajax对象的readyState值发生了改变(比如,
从0-->1),就会产生readystatechange事件。
b. responseText: 获得服务器返回的文本
c. responseXML: 获得服务器返回的XML dom对象
d. status: 获得状态码
e. readyState: 返回ajax对象与服务器通讯的状态。返回值是一个number类型的值,不同的值表示不同的含义:
0: (为初始化) --> 对象已建立,但是尚未初始化(尚未调用 open方法)
1: (初始化) --> 对象已建立,尚未调用send方法
2: (发送数据) --> send方法已调用
3: (数据传送中) --> 已接受部分数据
4: (响应结束) --> 接收了所有的数据
(3)ajax编程的基本步骤
1) 获取ajax对象(XmlHttpRequest)
2) 使用 XmlHttpRequest向服务器发送请求
3) 在服务器端处理请求
4) 在监听器当中,处理服务器返回的响应
1) 获取ajax对象(XmlHttpRequest)
var xhr = getXhr();
2) 发送请求
xhr.open(请求方式, 请求地址, 异步还是同步);
请求方式: get/post
请求地址:如果是get请求,请求参数要添加到请求地址的后面。
true表示异步请求: ajax对象发请求的同时,用户可以对当前
页面做其它的操作。一般常用异步。
false表示同步请求:ajax对象发请求的同时,浏览器会锁订当
前页面,用户需要等待处理完成之后才能做下一步操作。
方式一: get请求
var xhr = getXhr();
xhr.open('get', 'check_name.action?name=zs', true);
xhr.onreadystatechange=f1;
xhr.send(null);
方式二: post请求
var xhr = getXhr();
xhr.open('post', 'check_username.action', true);
// 如果发送的是 post请求,需要设置消息头的编码格式为 “application”
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange=f1;
xhr.send('username=' + $F('username'));
注意:
因为按照http协议的要求,如果发送的post请求,请求数据包里面,应该有一个消息头 content-type。但是,ajax对象默认没有,所以,需要调用setRequestHeader方法。

3) 编写服务器端的代码,服务器端一般不需要返回完整的页面,只需要返回部分的数据,比如一个简单的字符串。
4) 编写监听器
function f1(){
if(xhr.readyState == 4){
//获得服务器返回的数据
var txt = xhr.responseText;
//dom操作
}
}

<script type="text/javascript">
function $(id) // ajax常用函数的定义
{
return document.getElementById(id);
}

function $F(id) {
return document.getElementById(id).value;
}

function getXhr() // 获取 XMLHttpRequest
{
var xhr;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest(); // 非ie浏览器
}else{
xhr = new ActiveXObject('Microsoft.XMLHttp'); // ie浏览器
}
}
GET方式:
function check_name()
{
// 第一步: 获得 ajax对象
var xhr = getXhr();

// 第二步: 发送请求
xhr.open('get', 'check_name.action?name=' + $F('uname'), true);

// 第三步: ajax函数: 注册一个事件监听器
xhr.onreadystatechange = function() //此函数为 匿名函数,内部函数
{
// 只有ajax对象的readyState值为4时,才能获得服务器返回的数据
if(xhr.readyState == 4)
{
// 获得服务器返回的文本数据
var txt = xhr.responseText;

// 更新页面
${'name_msg'}.innerHTML = txt;
}
}
$('name_msg').innerHTML = '正在验证....';

// 第四步: 发送请求
xhr.send(null);
}
POST方式:
function check_name()
{
// 第一步: 获得 ajax对象
var xhr = getXhr();

// 第二步: 发送请求
xhr.open('post', 'check_name.action', true);
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');

// 第三步: ajax函数
xhr.onreadystatechange = function() //此函数为 匿名函数,内部函数
{
// 只有ajax对象的readyState值为4时,才能获得服务器返回的数据
if(xhr.readyState == 4)
{
// 获得服务器返回的文本数据
var txt = xhr.responseText;

// 更新页面
${'name_msg'}.innerHTML = txt;
}
}

$('name_msg').innerHTML = '正在验证....';

// 第四步: 发送请求
xhr.send('username=' + $F('uname'));
}


用GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。然而,在以下情况中,请使用 POST 请求:
(1) 无法使用缓存文件(更新服务器上的文件或数据库)
(2) 向服务器发送大量数据(POST 没有数据量限制)
(3) 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠





ajax编程中的编码问题
(1) 发送get请求:
ie浏览器内置的ajax对象,对中文参数使用gbk编码,而其它浏览器(firefox,chrome)使用utf8编码。
服务器端默认使用iso-8859-1去解码。

解决方案:
1) 服务器对get请求中的参数使用指定的编码格式进行解码。
比如: 对于tomcat,可修改conf/server.xml(添加URIEncoding="UTF-8")
即: 告诉服务器,对于所有的get请求,使用utf-8进行编码/解码
2) 对请求地址,使用encodeURI函数进行统一的编码(UTF-8)
该函数的作用: 对请求地址中的中文进行“UTF-8”编码。
var uri = 'check_username.action?username=' + $F{'username'};
var uri2 = encodeURI(uri); // 进行编码,欺骗浏览器,防止出现乱码
xhr.open('get', uri2, true);

总结:
解决get请求传递中文参数乱码问题:
(1) 修改 tomcat下的 server.xml, 在 Connection后添加
URIEncoding="UTF-8", 告诉服务器,对于get请求中的数据,使用UTF-8解码。
(2) 在 ajax在发送get请求前,添加:
var uri = 'check_uname.action?uname=' + $F{'uname'};
xhr.open('get', encodeURI(uri), true);
用上面2步,可结果ajax中get请求参数 中文乱码问题(对所以浏览器都适用).

(2)发送post
所有浏览器内置的ajax对象都会使用utf-8进行编码。
解决方案:
request.setCharacterEncoding("utf-8");

ajax应用中的缓存问题:
当使用IE浏览器时,如果使用get方式发请求,浏览器会将数据缓存起来。
这样,当再此发送请求时,如果请求地址不变,IE浏览器不会真正地向服务器发送请求,而是将之前缓存的数据显示给用户 。
解决方式1: 使用post方式发请求。
解决方式2: 在请求地址后面添加一个随机数:
xhr.open('get', 'some?tt=' + Math.random(), true);
5、发送同步请求
xhr.open('post','check_username.do',false);
...全文
6774 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
筱格格儿 2018-12-04
  • 打赏
  • 举报
回复
哇,谢谢分享~
oitTi_ 2018-08-16
  • 打赏
  • 举报
回复
不错 很实用
  • 打赏
  • 举报
回复
很好的学习知识,不错,收藏了。
zlf123 2018-04-10
  • 打赏
  • 举报
回复
很好的学习知识,谢谢分享!!!
peng_1229 2018-04-08
  • 打赏
  • 举报
回复
Ccool321 2018-04-08
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
不错,学习了
picker_123 2018-04-07
  • 打赏
  • 举报
回复
Mars_froth 2018-04-02
  • 打赏
  • 举报
回复
Yin_Chu 2018-03-30
  • 打赏
  • 举报
回复
可以,学习了
xiaocongzhi 2018-03-24
  • 打赏
  • 举报
回复
dahailaoli 2018-03-12
  • 打赏
  • 举报
回复
楼主回答很精辟,赞!
yueclub 2018-03-02
  • 打赏
  • 举报
回复
还可以,实用。
Monster186Java 2018-03-01
  • 打赏
  • 举报
回复
懒笑翻 2018-03-01
  • 打赏
  • 举报
回复
Go 旅城通票 2018-03-01
  • 打赏
  • 举报
回复
Ionic_zeng 2018-02-28
  • 打赏
  • 举报
回复
戎码亿升 2018-01-22
  • 打赏
  • 举报
回复
有没有jQuery的ajax总结呢
usecf 2018-01-22
  • 打赏
  • 举报
回复
hookee 2018-01-21
  • 打赏
  • 举报
回复
原书名:Foundations of Ajax 原出版社: Apress 作者: (美)Ryan Asleson,Nathaniel T.Schutta 译者: 金灵 等 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:7115144818 上架时间:2006-2-14 出版日期:2006 年2月 简介   ajax技术可以提供高度交互的web应用,给予用户更丰富的页面浏览体验。本书重点介绍ajax及相关的工具和技术,主要内容包括xmlhttprequest对象及其属性和方法、发送请求和处理响应、构建完备的ajax开发工具、使用jsunit测试javascript、分析javascript调试工具和技术,以及ajax开发模式和框架等。本书中所有例子的代码都可以从apmss网站本书主页的源代码(source code)免费得到。.   本书适合各层次web应用开发人员和网页设计人员阅读。    2005年,在web 2.0热潮中,ajax横空出世,迅速成为最炙手可热的web开发技术。google、microsoft、amazon和yahoo都已经全面采用ajax,新一代的网站如雨后春笋,迅速兴起。..   什么是ajax? ajax为什么会这么热,它到底有什么奇妙之处?ajax是少数高手才能使用的尖端技术吗?如何用ajax开发全新用户体验的web应用,如何用ajax赋予原有应用新的生命?本书将给你满意的答案!   书中不仅详细讲述了如何结合使用各种标准web技术如javascript、html、css和xmlhttprequest开发ajax应用,而且涵盖了调试、测试、文档、验证等工具,以及相关的模式、框架、应该避免的陷阱。阅读本书,再加上已有的开发经验,你也能在应用中使用超炫的ajax技术,使你的网站立即焕然一新!这一过程将乐趣无穷,我们衷心地希望,有一天能看到你开发的基于ajax的一流应用!... 目录 译者序. 前言 致谢 关于技术审校 第1章 ajax简介 1 1.1 web应用简史 1 1.2 浏览器历史 2 1.3 web应用的发展历程 3 1.3.1 cgi 4 1.3.2 applet 4 1.3.3 javascript 5 1.3.4 servlet、asp和php……哦,太多了! 6 1.3.5 flash 9 1.3.6 dhtml革命 10 1.3.7 xml衍生语言 10 1.3.8 基本问题 12 1.3.9 ajax 13 1.4 可用性问题 17 1.5 相关技术 18 1.6 使用场合 19 .1.7 设计考虑 20 1.8 小结 21 第2章 使用xmlhttprequest对象 23 2.1 xmlhttprequest对象概述 23 2.2 方法和属性 25 2.3 交互示例 26 2.4 get与post 28 2.5 远程脚本 29 2.5.1 远程脚本概述 29 2.5.2 远程脚本的示例 29 2.6 如何发送简单请求 31 2.6.1 简单请求的示例 32 2.6.2 关于安全 34 2.7 dom level 3 加载和保存规约 35 2.8 dom 35 2.9 小结 36 第3章 与服务器通信:发送请求和处理响应 37 3.1 处理服务器响应 37 3.1.1 使用innerhtml属性创建动态内容 37 3.1.2 将响应解析为xml 40 3.1.3 使用w3c dom动态编辑页面 45 3.2 发送请求参数 52 3.2.1 请求参数作为xml发送 59 3.2.2 使用json向服务器发送数据 64 3.3 小结 70 第4章 实现基本ajax技术 71 4.1 完成验证 71 4.2 读取响应首部 75 4.3 动态加载列表框 79 4.4 创建自动刷新页面 85 4.5 显示进度条 90 4.6 创建工具提示 95 4.7 动态更新web页面 101 4.8 访问web服务 110 4.9 提供自动完成 116 4.10 小结 123 第5章 构建完备的ajax开发工具箱 125 5.1 使用jsdoc建立javascript代码的文档 125 5.1.1 安装 126 5.1.2 用法 126 5.2 使用firefox扩展验证html内容 129 5.2.1 html validator 130 5.2.2 checky .. 132 5.3 使用dom inspector搜索节点 133 5.4 使用jslint完成javascript语法检查 137 5.5 完成javascript压缩和模糊处理 138 5.6 使用firefox的web开发扩展 140 5.7 实现高级javascript技术 141 5.7.1 通过prototype属性建立面向对象的javascript 142 5.7.2 私有属性和使用javascript的信息隐藏 146 5.7.3 javascript中基于类的继承 148 5.7.4 汇合 149 5.8 小结 152 第6章 使用jsunit测试javascript代码 155 6.1 javascript提出的问题 155 6.1.1 测试先行方法介绍 155 6.1.2 junit介绍 157 6.2 分析jsunit 158 6.2.1 起步 159 6.2.2 编写测试 159 6.2.3 运行测试 172 6.2.4 使用标准/定制查询串 177 6.2.5 使用jsunit服务器 181 6.2.6 获得帮助 183 6.2.7 还能用什么? 184 6.3 小结 184 第7章 分析javascript调试工具和技术 185 7.1 用greasemonkey调试ajax请求 186 7.1.1 greasemonkey介绍 186 7.1.2 使用greasemonkey xmlhttprequest调试用户脚本 186 7.1.3 使用xmlhttprequest调试用户脚本检查ajax请求和响应 186 7.2 调试javascript 188 7.2.1 使用firefox javascript console 189 7.2.2 使用microsoft script debugger 190 7.2.3 使用venkman 192 7.3 小结 207 第8章 万事俱备 209 8.1 模式介绍 209 8.1.1 实现褪色技术 209 8.1.2 实现自动刷新 210 8.1.3 实现部分页面绘制 210 8.1.4 实现可拖放dom 211 8.2 避免常见的陷阱 212 8.3 相关的更多资源 214 8.4 使用框架 216 8.5 taconite介绍 216 8.5.1 taconite原理 217 8.5.2 解决方案 217 8.5.3 taconite怎么处理内容 219 8.6 dashboard应用介绍 219 8.7 用taconite构建ajax dashboard 221 8.7.1 一般特性介绍 221 8.7.2 设计特性介绍 222 8.7.3 分析代码 224 8.7.4 分析天气预报组件 225 8.7.5 分析标题新闻组件 232 8.7.6 如何完成自动重新刷新工作 235 8.7.7 构建更好的autocomplete 237 8.8 小结 240 附录a 开发跨浏览器javascript 241 a.1 向表中追加行 241 a.2 通过javascript设置元素的样式 242 a.3 设置元素的class属性 243 a.4 创建输入元素 243 a.5 向输入元素增加事件处理程序 244 a.6 创建单选钮 245 a.7 小结 246 附录b ajax框架介绍 247 b.1 浏览器端框架 247 b.1.1 dojo 248 b.1.2 rico 248 b.1.3 qooxdoo 248 b.1.4 tibet 249 b.1.5 flash/javascript集成包 249 b.1.6 google ajaxslt 249 b.1.7 libxmlrequest 249 b.1.8 rslite 250 b.1.9 sack 250 b.1.10 sarrisa 250 b.1.11 xhconn 251 b.2 服务器端框架 251 b.2.1 cpaint 251 b.2.2 sajax 251 b.2.3 json/json-rpc 251 b.2.4 direct web remoting 252 b.2.5 swato 252 b.2.6 java blueprints 252 b.2.7 ajax.net 252 b.2.8 microsoft的atlas项目 253 b.2.9 ruby on rails ... 253

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧