【从0到1学Web前端】javascript中的ajax对象(一)

现在最流行的获取后端的(浏览器从服务器)数据的方式就是通过Ajax了吧。今天就来详细的来学习下这个知识吧。如果使用ajax来访问后段的数据,浏览器和浏览器端的js做了那些工作呢?我做了一个图,请大家看一下:

1.原生js的Ajax请求的方式

由上面的图我们大致的知道了ajax访问后端数据的一个过程。最重要的就是检测浏览器,创建XMLHttpRequest对象的过程:

代码如下:

/*
 判断是否支持XMLHttpRequest
 */
function createXHR() {
    if (typeof XMLHttpRequest != "undefined") {
        return new XMLHttpRequest();
    }
    else if (typeof ActiveXobject != "undefined") {
        if (typeof arguments.callee.activeXString != ‘string‘) {
            var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"], i, len;
            for (i = 0, len = versions.length; i < len; i++) {
                try {
                    new ActiveXObject(versions[i]);
                    arguments.callee.activeXString = versions[i];
                    break;
                }
                catch (ex) {
                    console.log(ex);
                }
            }
        }
        return new ActiveXObject(arguments.callee.activeXString());
    }
    else {
        throw new Error(‘no XHR‘)
    }
}

此处分别是根据浏览器是否支持XMLHttpRequest对象来判断是否是IE还是非IE,然后来创建响应的对象。

当XHR对象open()的时候,此时并没有向Web服务器发送HTTP请求,而是当send()的时候,XHR对象才向Web服务器发送请求。

xhr.send(‘‘);

这里有一个非常重要的地方,就是send的参数为null

send()方法接收一个参数,需要作为请求主体发送的数据。如果不需要作为请求主体发送数据,则必须传入null,因为这个参数对于某些浏览器是必须的。

当浏览器接收到Web服务器的响应后,会开始填充XHR对象的属性,主要的如下:

  • responseText作为响应的主体被返回的文本
  • responseXML如果响应的内容类型为text/xml或者application/xml这个属性中将包含着响应数据的XML DOM文档
  • status响应的HTTP状态
  • statusTextHTTP状态的说明

    一般通过XHR.status属性值为200表示成功的标志。此时可以获取responseTextresponseXML的值。当XHR.status==304响应是有效的)的时候,说明文件没有被修改,可以直接使用浏览器缓存的版本。

检测的代码如下:

if (xhr.status >= 200 && xhr.status <= 300 || xhr.status == 304) {
                console.log(xhr.responseText);
            }
            else {
                console.log(xhr.responseText);
            }

不要依赖responseText,因为在跨浏览器处理的时候这个属性获取的值是不可靠的。

上面的代码在同步发送请求验证和获取返会的数据是没有任何问题的。但是当我们发送异步请求的时候确实会出现问题,因为我们不知道服务端的Response在什么时候反回。那么我们该怎么办呢?

其实在ajax在向Web服务器发送请求的时候,会有一个readyState属性来检测XHR对象的请求/响应过程的当前活动阶段,值的列表如下:

  • 0未初始化。尚未调用open()方法
  • 1启动。已经调用open()方法,但是尚未调用send()方法
  • 2发送。已经调用send()方法。但是还没有接收到响应。
  • 3接收。已经接收到部分的响应数据。
  • 4完成。已经接收到全部的响应数据,而且已经在客户端可以使用了。

    每当XHR.readyState的属性值发生变化,都会触发一次onreadystatechange事件。通常我们只对XHR.readyState==4的时候感兴趣(这时数据已经全部就绪)。

必须在调用open()之前指定onreadystatechange事件处理程序才能够保证夸浏览器的兼容性。

实例代码如下:

var xhr = new createXHR();
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if (xhr.status >= 200 && xhr.status <= 300 || xhr.status == 304) {
                console.log(xhr.responseText);
                //console.log(xhr.)
                //document.createElement()
                creatNode(‘script‘);
                creatNode(‘img‘);
            }
            else {
                console.log(xhr.responseText);
            }
        }
    }
    xhr.open(‘GET‘, ‘test.js‘, true);
    xhr.send(‘‘);

2.jQuery发送Ajax的方式

参考jquery的文档,使用jquery来发送ajax请求比原生的js简单很多。如下代码:

2.1GET方式

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script"
});

2.2POST方式

$.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
});

这里也只是简单的实例,如果想要详细的了解jQuery中ajax的使用。可以参考Jquery的官方文档。

中文文档(点击转到

英文文档(点击转到

时间: 2024-10-25 04:49:34

【从0到1学Web前端】javascript中的ajax对象(一)的相关文章

【从0到1学Web前端】CSS定位问题二(float和display的使用)

display 属性规定元素应该生成的框的类型. 这个属性用于定义建立布局时元素生成的显示框类型.对于 HTML 等文档类型,如果使用 display 不谨慎会很危险,因为可能违反 HTML 中已经定义的显示层次结构.对于 XML,由于 XML 没有内置的这种层次结构,所有 display 是绝对必要的. 浏览器支持: 所有主流浏览器都支持 display 属性. 注释:任何版本的 Internet Explorer (包括 IE8)都不支持 "inherit"."inlin

【从0到1学Web前端】CSS定位问题三(相对定位,绝对定位)

引子: 开始的时候我想先要解决一个问题,怎么设置一个div盒子撑满整个屏幕? 看下面的html代码: <body> <div id="father-body"> <div class="item1"></div> </div> </body> 实现方法一: html, body,#father-body{ height:100%; width:100%; background-color:#12

【从0到1学Web前端】CSS伪类和伪元素

1.CSS中的伪类 CSS 伪类用于向某些选择器添加特殊的效果. 语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用 selector.class : pseudo-class {property: value} 如下面的一段代码: a.red : visited {color: #FF0000} <a class="red" href="css_syntax.asp">CSS Syn

女孩子适合学web前端还是Java编程?

近几年随着互联网的快速发展,对于Web前端开发的人才需求越来越大,就业薪资也不断的上升,随着行业的火爆,高薪回报吸引了很多有志青年投身互联网行业.女孩子适合学Web前端还是Java? 纵观现阶段互联网Web前端开发工程师的就业人员,女孩子从事这个行业的比例不大,由于这种现象的存在,当有女孩说想要学Web前端开发,很多不一样的声音就出来了,说女生不适合做程序员,其实不然,没有什么东西是你天生做不了的,干不了,只能说明你还不够努力. 虽然少,不是照样有女孩子在做么?而且由于男女比例不协调,所以女生做

新手学web前端应该学什么?

随着互联网的发展速度迅猛,web前端工程师越来越火热,想学习Web前端开发吗 ? 若想成为web前端工程师需要掌握哪些知识?今天小编总结了成为web前端工程师需要掌握的所有知识. 一.基础 1.H5标签 1.1.H5引进的一些新的标签,需要注意article.header.footer.aside.nav以及HTML的标题结构 1.2.理解浏览器解析HTML的过程,理解DOM的树形结构,及相应API 1.3.理解HTML标签在各个浏览器上的默认样式(代理样式),理解CSS中的重置样式表的概念 1

nodejs 和web前端JavaScript什么区别

web前端javascript组成: ECMAScript,(是js的标准,js是它的具体实现和扩展,它描述语言的语法和基本对象,如:语法,运算符,语句,继承机制,数据结构以及一些内置对象) DOM(文档对象模型),描述处理网页内容的方法和接口,将整个文档document解析成dom树供用户使用js对文档进行处理. BOM(浏览器对象模型),描述可以和浏览器窗口交互的方法和接口(对象结构),如:window对象,history.location.navigator等. nodejs除了语言基础E

学web前端开发,哪个机构好呢

学习web前端开发已然成为一种潮流,甚至有很多做后台的转行来学.学习web开发,选择一家好的web前端开发机构至关重要.但是,现在各类的web前端开发机构如雨后春笋般迅速崛起,这也增加了我们的选择难度.那么,学web前端开发,哪个机构好呢?我们可以从以下几点进行考察: 第一点,课程是否不断更新,是否符合企业需求 随着时代的发展,各类的IT技术也在不断的更新,当然了web前端开发技术也不例外,作为一名web前端工程师,只有不断的学习新知识才能赶上时代的发展步伐. 所以,这就需要各类的web前端培训

女生学Web前端优势往往很明显

学Web前端的女生不算少数,女生学习的成果也往往不比男生差,前端偏向设计.交互和产品方向,需要更加贴合用户,女生心思细腻,对页面细节把控更好,更具美感,对用户心理把握更准,这样的优势往往是男生所不具备的,女生学Web前端其实一定问题也没有. [关于工作] 1.负责前端架构设计: 2.对Web项目的前端实现方案提供专业指导及监督: 3.对新人及相关开发人员进行前端技能培训: 4.设计并实施前端优化策略: 5.负责前端前沿技术的研究. [关于日常] 1.既有对于新奇技术的不断尝试,也有基础知识的不断

关于大型网站技术演进的思考(二十)--网站静态化处理—web前端优化—中(12)

Web前端很多优化原则都是从如何提升网络通讯效率的角度提出的,但是这些原则使用的时候还是有很多陷阱在里面,如果我们不能深入理解这些优化原则背后所隐藏的技术原理,很有可能掉进这些陷阱里,最终没有达到最佳的预期效果,今天我在这里分析下浏览器和服务端通讯的一些细节问题,希望通过分析这些细节问题,能给大家一个启迪,能更好的理解这些优化原则背后的隐秘,最终能更好的运用这些原则. 网站的通讯技术是构建在http协议上,http协议底层通讯手段使用的是tcp/ip协议,但是tcp通讯协议在建立连接和断开连接这