从Ajax到JQuery Ajax学习


Posted in Javascript onFebruary 14, 2007

Ajax篇
XMLDocument和XMLHttpRequest对象
第一:创建XMLHttpRequest请求对象

function getXMLHttpRequest() { 
var xRequest=null; 
if(window.XMLHttpRequest) { 
xRequest=new XMLHttpRequest(); 
}else if(typeof ActiveXObject != "undefined"){ 
xRequest=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
return xRequest; 
}

或者:
var request=null; 
function createRequest() { 
try { 
request=new XMLHttpRequest(); //非Microsoft IE浏览器 
} catch (trymicrosoft) { //Microsoft IE 
try { 
request=new ActiveXObject(“Msxml2.XMLHTTP”); 
} catch (othermicrosoft) { 
try { 
request=new ActiveXObject(“Microsoft.XMLHTTP”); 
} catch (failed) { 
request=null; 
} 
} 
} 
if (request==null) 
alert(“Error creating request object!”); 
} 
[code] 
这个独立的创建XMLHttpRequest请求对象的函数就可以被调用了。 
注意:XMlHTTP对象不是W3C标准,因此在创建时要分别考虑不同浏览器环境的支持。 
XMLHTTP对象一共就6个方法8个属性,支持两种执行模式:同步和异步。 
XMLHTTP对象的属性和方法列表(来自IXMLHTTPRequest接口): 属性名 
类型 
描述 
onreadystatechange 
N/A 
指定当就绪状态发生改变时调用的事件处理函数,仅用于异步操作 
readyState 
Long 
异步操作的状态:未初始化(0),正在加载(1),已加载(2),交互(3),已完成(4) 
responseBody 
Variant 
将响应信息正文作为unsigned byte数组返回 
responseStream 
Variant 
将响应信息正文作为一个ADO Stream对象返回 
responseText 
String 
将响应信息正文作为一个文本字符串返回 
responseXML 
Object 
通过XMLDom将响应信息正文解析为XMLDocument对象 
status 
Long 
服务器返回的HTTP状态码 
statusText 
String 
服务器HTTP响应行状态 
方法名 
描述 
abort 
取消当前 HTTP 请求 
getAllResponseHeaders 
从响应信息中检索所有的首部字段 
getResponseHeader 
从响应信息正文中获得一个 HTTP 首部字段值 
open(method,url,boolAsync,bstrUser,bstrPassword) 
打开一个与 HTTP 服务器的连接 
send(varBody) 
向HTTP服务器发送请求。可包含正文。 
setRequestHeader(bstrHeader, bstrValue) 
设定一个请求的首部字段 
第二:向服务器发送请求 
通过XMLHttpRequest对象向服务器发送请求是非常简单,只需要给它传递一个服务器页面的URL,这个页面将生成数据。 
[code] 
function sendRequest(url,params,HttpMethod) { 
if(!HttpMethod){ 
HttpMethod="POST"; 
} 
var req=getXMLHttpRequest(); 
if(req){ 
req.open(HttpMethod,url,true); 
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
req.send(params); 
} 
}

通过以上代码对请求进行设置后,会立即将控制权返回给我们,与此同时网络和服务器则忙着执行它们自己的任务。
第三:使用回调函数监视请求
通过XMLHttpRequest对象我们向服务器发送了异步请求,那我们怎样才能知道请求已经完成了呢?因此处理异步通信的第二个部分是在代码中设置一个入口点,以便在调用结束的时候可以获取结果信息。这通常是通过分配一个回调函数来实现的。
回调函数非常适合用于大多数现代UI工具箱中的事件驱动的编程方法。
以下我们重写sendRequest()函数,如下:
var req=null; //声明一个全局变量 
function sendRequest(url,params,HttpMethod) { 
if(!HttpMethod){ 
HttpMethod="GET"; 
} 
req=getXMLHttpRequest(); 
if(req){ 
req.onreadystatechange=onReadyStateChange; //注意这就是onreadystatechange回调函数用来监视请求。具体是通过自定义的Javascript函数onReadyStateChange()来进行事件处理。 
req.open(HttpMethod,url,true); 
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
req.send(params); 
} 
}

以下的回调函数onReadyStateChange就是用来处理从服务器得到的响应信息。
view sourceprint?01 function onReadyStateChange(){
02 var data=null;
03 if (req.readyState==4){
04
05 if (req.status==200) {
06 data=req.responseText;
07 } else {
08 data="loading.....["+req.readState+"]";
09 }
10
11 }
12 .....在这可以做一些与此返回信息有关的操作,比如输出信息等。
13 }
上述代码中使用了XMLHttpRequest对象的responseText属性,以文本字符串的形式获取响应中的数据。对于简单的数据来说这是有用的。当我们需要服务器返回更大的结构化的数据集,就可以使用responseXML属性。如果已经将响应的MIME类型正确设置为text/xml,这个属性就会返回一个DOM文档,因此我们可以使用DOM的属性和函数(例如getElementById()和childNodes)来对它进行处理。
JQuery Ajax篇
jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据
jQuery 的底层 AJAX 实现。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。$.ajax() 只有一个选项参数:参数 key/value 对象,包含各配置及回调函数信息。详细参数选项见下。 参数名
类型
描述
url
String
(默认: 当前页地址) 发送请求的地址。
type
String
(默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
timeout
Number
设置请求超时时间(毫秒)。此设置将覆盖全局设置。
async
Boolean
(默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
beforeSend
Function
发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。
function (XMLHttpRequest) {
this; // the options for this ajax request
}
cache
Boolean
(默认: true) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息。
complete
Function
请求完成后回调函数 (请求成功或失败时均调用)。参数: XMLHttpRequest 对象,成功信息字符串。
function (XMLHttpRequest, textStatus) {
this; // the options for this ajax request
}
contentType
String
(默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。
data
Object,
String
发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如:
{foo:["bar1", "bar2"]}转换为 '&foo=bar1&foo=bar2'。
dataType
String
预期服务器返回的数据类型。如果不指定,jQuery 将自动根据HTTP 包 MIME 信息返回responseXML 或 responseText,并作为回调函数参数传递,可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含 script 元素。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
error
Function
(默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数:XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象。
function (XMLHttpRequest, textStatus, errorThrown) {
// 通常情况下textStatus和errorThown只有其中一个有值
this; // the options for this ajax request
}
global
Boolean
(默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件
ifModified
Boolean
(默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。
processData
Boolean
(默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。
success
Function
请求成功后回调函数。这个方法有两个参数:服务器返回数据,返回状态
function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
this; // the options for this ajax request
}
这里Ajax事件里面的 this 都是指向Ajax请求的选项信息的。
jQuery.ajaxSetup( options ) : 设置全局 AJAX 默认选项。
如:设置 AJAX 请求默认地址为 "/xmlhttp/",禁止触发全局 AJAX 事件,用 POST 代替默认 GET 方法。其后的 AJAX 请求不再设置任何选项参数。其示例代码:
$.ajaxSetup({
url: "/xmlhttp/",
global: false,
type: "POST"
});
$.ajax({ data: myData });
serialize() 与 serializeArray()
serialize() : 序列表表格内容为字符串。
serializeArray() : 序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。
以上JQuery Ajax的底层实现,我们一般很少用到,JQuery对jQuery.ajax()进行了封装,使我们能够更加简便的使用Ajax异步调用。
1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。
url (String) : 请求的HTML页的URL地址。
data (Map) : (可选参数) 发送至服务器的 key/value 数据。
callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。
这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some > selector"。
这个方法可以很方便的动态加载一些HTML文件,例如表单。
2. jQuery.get( url, [data], [callback] ) :使用GET方式来进行异步请求
url (String) : 发送请求的URL地址.
data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示,会作为QueryString附加到请求URL中。
callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。
3. jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求
url (String) : 发送请求的URL地址.
data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示。
callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。
type (String) : (可选)官方的说明是:Type of data to be sent。其实应该为客户端请求的类型(JSON,XML,等等)
如果你设置了请求的格式为"json", 此时你没有设置Response回来的ContentType 为:Response.ContentType = "application/json"; 那么你将无法捕捉到返回的数据。
4. jQuery.getScript( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件。
url (String) : 待载入 JS 文件地址。
callback (Function) : (可选) 成功载入后回调函数。
jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。 1.2中,您可以跨域调用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本,请加入延时函数。
这个方法可以用在例如当只有编辑器focus()的时候才去加载编辑器需要的JS文件。
Javascript 相关文章推荐
Prototype使用指南之base.js
Jan 10 Javascript
用js实现键盘方向键翻页功能的代码
Jun 03 Javascript
用jquery和json从后台获得数据集的代码
Nov 07 Javascript
9款2014最热门jQuery实用特效推荐
Dec 07 Javascript
JavaScript Math.floor方法(对数值向下取整)
Jan 09 Javascript
JS填写银行卡号每隔4位数字加一个空格
Dec 19 Javascript
Web开发使用Angular实现用户密码强度判别的方法
Sep 27 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
js中比较两个对象是否相同的方法示例
Sep 02 Javascript
jQuery实现鼠标滑动切换图片
May 27 jQuery
vue中watch和computed的区别与使用方法
Aug 23 Javascript
在项目vue中使用echarts的操作步骤
Sep 07 Javascript
JAVASCRIPT对象及属性
Feb 13 #Javascript
js判断浏览器的比较全的代码
Feb 13 #Javascript
jQuery中文入门指南,翻译加实例,jQuery的起点教程
Feb 09 #Javascript
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 #Javascript
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
Feb 09 #Javascript
控制打印时页眉角的代码
Feb 08 #Javascript
如何用javascript去掉字符串里的所有空格
Feb 08 #Javascript
You might like
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
PHP多线程类及用法实例
2014/12/03 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
php实现可运算的验证码
2015/11/10 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python动态参数用法实例分析
2015/05/25 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
python实现简单遗传算法
2018/03/19 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
致跳高运动员加油稿
2014/02/12 职场文书
高中军训感想800字
2014/02/23 职场文书
公司股东合作协议书
2014/09/14 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers