Jquery源码分析---Ajax分析。
来源:互联网 发布:淘宝复制链接发给好友 编辑:程序博客网 时间:2024/06/09 19:50
Jquery源码分析---Ajax分析
豆豆网 技术应用频道 2009年01月21日 【字号:小 中 大】 收藏本文
Jquery源码分析---Ajax分析。
头部还有一个If-Modified-Since的属性用来提高效率的。它和”Last-Modified配合起来使用。在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:Last-Modified: Fri, 12 May 2006 18:53:33 GMT
客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过: If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT 如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。
当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
拦截处理
⑧处是一个send之前的拦截处理,可以通过s. beforeSend(xhr, s)函数的形式传入拦截函数。保证在发送之前确保满足某些条件。在取得返回数据的时候,也可以通过s.dataFilter(data, type);形式来拦截处理data。不过这里主要的作用对data进一步的筛选。
onreadystatechange
⑨处是onreadystatechange的回调处理。这里采用是poll的形式进行处理。它把返回的状态分成status:tiemout-->error-->notmodified-->success—>parsererror这几种。如果status == "success"那么分析这些数据之后再进行last-modified相关的处理。为了不取回没有修改过数据。
分析数据的代码如下:
//处理请求返回的数据
httpData : function(xhr, type, s) {
var ct = xhr.getResponseHeader("content-type"),
xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
data = xml? xhr.responseXML : xhr.responseText;
if (xml && data.documentElement.tagName == "parsererror")
throw "parsererror";
//允许一个pre-filtering函数清洁repsonse
if (s && s.dataFilter)
data = s.dataFilter(data, type);
//script时,就运行
if (type == "script") jQuery.globalEval(data);
//json,生成json对象。
if (type == "json") data = eval("(" + data + ")");
return data;
},
如果返回的content-type是xml,html,text等都返回。对script执行jQuery.globalEval来执行它。对于Json类型,通过eval来生成返回的json对象。
// 在全局的范围eval 代码,也就是在<head></head>中
globalEval : function(data) {
data = jQuery.trim(data);
if (data) {
// Inspired by code by Andrea Giammarchi
// http://webreflection.blogspot.com/2007/08/
//global-scope-evaluation-and-dom.html
var head = document.getElementsByTagName("head")[0]
|| document.documentElement,
script = document.createElement("script");
script.type = "text/javascript";
if (jQuery.browser.msie) script.text = data;
else script.appendChild(document.createTextNode(data));
// Use insertBefore instead of appendChild to circumvent an IE6
// bug. This arises when a base node is used (#2709).
head.insertBefore(script, head.firstChild);
head.removeChild(script);
} },
- Jquery源码分析---Ajax分析。
- Jquery源码分析---Ajax分析
- jQuery源码分析-15AJAX-类型转换器
- jQuery源码分析之$.ajax方法
- jQuery源码分析系列 : Ajax 整体结构
- jquery 源码分析6-ajax(B)ajax参数组装过程
- [ jQuery ] jQuery 源码分析!
- Jquery .ajax方法分析
- Jquery .ajax方法分析
- Ajax.NET源码分析
- Ajax.NET源码分析
- jQuery源码分析系列(30) : Ajax 整体结构
- jquery 源码分析8-ajax(D)JSONP跨域处理
- Jquery源码分析(一)
- jQuery 源码分析
- JQuery 源码分析 -1
- jQuery源码分析
- jquery源码分析
- 统一建模语言UML轻松入门(1)――基本概念
- hash_map
- OpenSocial参考资料工具
- 提高C#编程水平不可不读的50个要诀
- 如何VC6.0下编译WDM驱动程序
- Jquery源码分析---Ajax分析。
- 获取服务器的时间
- 编码范围
- JQuery中使用AJAX
- file_get_contents网页抓取
- [dp问题] Girl Love Value(dp问题)hdu2670
- 计算机网络10问之6 如何将网络共享文件夹映射到你的计算机
- VC6.0写的程序在VS2005上运行出现的问题
- 1、初识