$.ajax其实底层还是用的XMLHttpRequest,对于加载数据的格式datatype有:xml、text、html、json、jsonp、script。

其中xml、text不需要处理,直接使用原生的responseXML、responseText。对于html、json其实也是用responseText接收的,对于json格式,jquery拿到responseText后会预先用JSON.parse()去格式化一下json数据再传给回调函数。

对于jsonp和script的,其实不走xhr对象,直接使用script标签。但是在使用datatype=script之前,jquery还是做了判断,只有跨域请求才会走<script>标签。

具体判断如下:

s.crossDomain = !!( parts &&
( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
);

此处代码会判断(请求的url===location.href)。如果不等于,相当于跨域,jquery会主动判断为跨域请求,使用script标签进行处理。如下代码:

jQuery.ajaxTransport( "script", function( s ) {

    // This transport only deals with cross domain requests
if ( s.crossDomain ) {//jquery判断是否跨域,跨域才会添加script标签 var script,
head = document.head || jQuery( "head" )[ 0 ] || document.documentElement; return { send: function( _, callback ) { script = document.createElement( "script" ); script.async = true; if ( s.scriptCharset ) {
script.charset = s.scriptCharset;
} script.src = s.url; // Attach handlers for all browsers
script.onload = script.onreadystatechange = function( _, isAbort ) { if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { // Handle memory leak in IE
script.onload = script.onreadystatechange = null; // Remove the script
if ( script.parentNode ) {
script.parentNode.removeChild( script );
} // Dereference the script
script = null; // Callback if not abort
if ( !isAbort ) {
callback( 200, "success" );
}
}
}; // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
// Use native DOM manipulation to avoid our domManip AJAX trickery
head.insertBefore( script, head.firstChild );
}, abort: function() {
if ( script ) {
script.onload( undefined, true );
}
}
};
}
} );

  同时在请求之前,jquery还做了一些事情。

header里写了:

X-Requested-With = "XMLHttpRequest";

If-Modified-Since = url;

Content-Type = application/x-www-form-urlencoded; 这个是让ajax提交模拟form表单提交的数据,从浏览器端看到的是如下:

关于jQuery的ajax的源码的dataType解读的更多相关文章

  1. 在网站开发中很有用的8个 jQuery 效果【附源码】

    jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuer ...

  2. 分享一组很赞的 jQuery 特效【附源码下载】

    作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些  ...

  3. jQuery 2.0.3 源码分析core - 选择器

         声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢!      打开jQuery源码,一眼看去到处都充斥着正则表达式,jQuery框架的基础就是查询了,查询文档元素对象 ...

  4. AJAX JSONP源码实现(原理解析)

    关于JSONP以及跨域问题,请自行搜索. 本文重点给出AJAX JSONP的模拟实现代码,代码中JSONP的基本原理也一目了然. <html xmlns="http://www.w3. ...

  5. 14款让前端开发者心动的jQuery/CSS3插件及源码

    14款让前端开发者心动的jQuery/CSS3插件及源码,一起来看看. 1.jQuery左右滚动banner代码! DEMO演示    /    源码下载 2.jQuery QQ表情插件qqFace ...

  6. 第二十五课:jQuery.event.trigger的源码解读

    本课主要来讲解jQuery.event.trigger的源码解读. trigger = function(event, data, elem, onlyHandlers){ if(elem & ...

  7. jQuery 2.0.3 源码分析Sizzle引擎解析原理

    jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理 声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 先来回答博友的提问: 如何解析 div > p + ...

  8. 基于jQuery经典扫雷游戏源码

    分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <center> <h1>j ...

  9. jquery $.proxy使用 Jquery实现ready()的源码

    jquery $.proxy使用   在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: 1 //正常的this使用 2 $('#myElement') ...

随机推荐

  1. IsDbNull 方法的用法

    本文来自:http://lazhgg.cnblogs.com/archive/2006/02/21/334915.html 在c#中,进行数据库查询时使用IsDbNull 方法判断数据库中字段值是否存 ...

  2. DM6437 C64X+ EDMA 疑惑总结记录

    总结一下DM6437中的EDMA的使用出现的问题,方便以后再开发定位问题. 1.EDMA Link 和 Chain的区别 link实现了DMA的自动重加载(非静态模式),需要两个param chain ...

  3. RHEL5.8安装Sybase 15.7_x86_64

    RHEL5.8安装Sybase 15.7如果您运行的是 RHEL 5 或更高版本,请使用以下设置:kernel.exec-shield = 0kernel.randomize_va_space = 0 ...

  4. PHP调用WCF小结

    新工作第三周,做了3年多的.Net,突然急转弯做PHP,漂移过弯,速度180迈 由于数据的整合,在项目中不得不使用PHP调用WCF 一头的雾水,网上相关的资料少又少,在phpChina发个帖子,还没有 ...

  5. MVC 笔记(二)

    HttpUtility.HtmlEncode来预处理用户输入,这能阻止用户向视图中用链接注入js代码或html标记 .[Required]:非空验证 .[StringLength(**)]:设置字符的 ...

  6. JQ点击高亮显示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. PlSql复制角色、权限和添加角色权限

    一.登录你想要复制数据库的用户

  8. JAVA的对象和引用——一个真实遇到的问题

    最近在写一段代码的时候,不懂JAVA的我被困住了.先简单描述一下要实现的效果:我要往secretVector里塞28个byteVector,这28个byteVector分别装着10个数值,而且这28个 ...

  9. Android 真机调试显示offline

    今天调试程序部署的时候显示设备状态时offline. 然后突然想起来我通过命令行操作过设备. 然后找来一下,如下命令. adb kill-server adb devices

  10. C#控制台程序本地化应用(Localization)

    本地化在百度百科上的解释如下: “软件本地化是指将某一产品的用户界面(UI)和辅助材料(文档资料和在线帮助菜单)从其原产国语言向另一种语言转化,使之适应某一外国语言和文化的过程.” 其原理主要是把相同 ...