Jquery源码分析---Ajax分析。
2009-03-09 15:00
447 查看
Jquery源码分析---Ajax分析豆豆网 技术应用频道 2009年01月21日 【字号:小 中 大】 收藏本文关键字: FCKEditor 闭包 Dojo 在线编辑器 position 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-1.9.1源码分析系列(十六)ajax——jsonp原理
- jQuery1.9.1源码分析系列(十六)ajax之ajax框架
- jQuery-1.9.1源码分析系列(十六)ajax——ajax处理流程以及核心函数
- 《JavaScript 源码分析》之 jquery.unobtrusive-ajax.js
- jQuery源码分析之ajaxConverter与ajaxHandleResponse函数
- jquery 源码分析5-ajax()ajax原理,可以加载的类型
- jQuery-1.9.1源码分析系列(十六)ajax——ajax框架
- jQuery-1.9.1源码分析系列(十六)ajax——ajax处理流程以及核心函数
- jQuery-1.9.1源码分析系列(十六)ajax——响应数据处理和api整理
- jquery 源码分析6-ajax(B)ajax参数组装过程
- jQuery1.9.1源码分析系列(十六)ajax之ajax框架
- jQuery-1.9.1源码分析系列(十六)ajax——jsonp原理
- jQuery deferred应用之ajax详细源码分析(二)
- jQuery源码分析系列(35) : Ajax - jsonp的实现与原理
- jquery 源码分析7-ajax(C)XMLHttpRequest回调函数onreadystatechange函数
- jQuery源码分析系列(37) : Ajax 总结
- jQuery deferred应用之ajax详细源码分析(二)
- jquery中的$.ajax()的源码分析
- jQuery源码分析系列(30) : Ajax 整体结构
- jquery 源码分析8-ajax(D)JSONP跨域处理