FITURE

If you can fight, fight.

首页 >> 分享>>Javascript>>Ajax基础

Ajax基础

Posted by fiture / 2013年09月03日 / Javascript

Ajax,译为异步JavaScript和XML(Asynchronous JavaScript+XML)。它的主要作用是无需重新加载页面,通过浏览器内置XMLHttpRequest对象向服务器请求或者发送数据.Ajax的核心就是XMLHttpRequest(XHR)对象。熟悉使用它是我们做前端必须要掌握的一个基础的技能。

不过说来也挺惭愧的,实际运用中,一般是用的已经封装好的ajax()方法,无暇去顾及最低层的细节。不过现在还是好好的学学Ajax的基础吧。

这里要感谢IE,虽然我一直对IE没什么好感,它就是一个奇葩,不过每种事物多样发展,毕竟是好的,有不同,有争议,有竞争,才有万事万物的发展。XMLHttpRequest对象是首先由微软引入的一个特性,具体的产品就是IE5。感谢IE,感谢微软,引进这么好的一个东东,推进WEB的发展。

标准浏览器中,引进了原生的XMLHttpRequest对象,是一个全局的对象。而IE的XMLHttpRequest对象则是通过内置于MSXML库中的ActiveX对象实现。IE存在3种不同版本的XHR对象:MSXML2.XMLHttpMSXML2.XMLHttp.3.0MSXML2.XMLHttp.6.0

创建一个XHR对象的方法:

function createXHR(){
  if (window.XMLHttpRequest){
    return new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    if (!arguments.callee.activeXString) {
      var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'];

      for (var i = 0, len = version.length; i < len; i++) {
        try {
          var xhr = new ActiveXObject(version[i]);
          arguments.callee.activeXString = versions[i];
          return xhr;
        } catch (ex) {
          //Skip
        }
      }
    }
    return new ActiveXObject(arguments.callee.activeXString);
  } else {
    throw new Error('XHR object unavailable.');
  }
}

//创建XMLHttpRequest 实例
var xhr = createXHR();

XHR对象的方法,属性,和事件:

XHR实例对象,提供了一些方法供我们方便使用之。

1、xhr.open()

这个方法接收3个参数:请求的类型(method), 请求的地址(url),是否为异步请求( isAsynchronous),通过调用这个方法,我们可以初始化一个xhr请求.

2、xhr.send()

这个方法接收1个参数:请求的数据(data),如果不发生数据则为null,send方法,启动xhr,并且发送数据。

XHR实例对象,还有一些常用的属性

1、responseText,xhr请求响应的内容文本

2、responseXML,xhr请求响应的xml类型的数据

3、status,xhr响应的HTTP状态码

4、statusText,HTTP状态的说明文本

5、readyState,请求和响应过程的阶段,用数值(0,1,2,3,4)表示,代表不同的阶段

[0] 未初始化,未调用open方法

[1] 启动,已经调用open方法,未调用send方法

[2] 发送,已经调用send方法,但未收到接收响应

[3] 接收,已经收到数据,数据未接收完成

[4] 接收完成,数据接收完成

注意,响应的内容文本(responseText)包含响应的responseXML。如果有xml响应内容,responseText里面也会有相应内容,通常我们通过responseText就可以获取全部响应内容。

xhr还提供一个事件(onreadystatechange),以供异步调用xhr时的时候使用。具体的例子如下:

var xhr = createXHR();

xhr.onreadystatechange = function(){
  if (xhr.readyState == 4) {
    if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304 ) {
      alert(xhr.responseText);
    } else {
      alert('Error: ' + xhr.status);
    }
  }
}

xhr.open('get', '/test/url/', true);
xhr.send(null);

需要说明的是,绑定onreadystatechange事件需要在open方法调用前绑定。

另外透露下最近失业了,前几天裸辞了,有人问我为啥选择裸辞而不是先找好工作再跳槽,1、我的回答是我觉得那样对原公司不好,感觉如果在原公司找工作就是偷偷摸摸,偷情一般。不够道义。2、对自身也是一种考验,你会经历许多。

所以呢,即便这样对自身不利,我还是做出了这样的选择。关于辞职的原因,其实也很简单,给自己多一个选择,多一些机会。以前的同事,公司都挺好,在此还得表示感谢,谢谢你们!

然后,生活还得继续,接下来就是找工作吧,寻找下一段旅程,希望能有所收获,有所成长,我相信一定会很精彩。

一条回应:“Ajax基础”

  1. icever说道:

    If you can fight, fight.(*^__^*)

发表评论

电子邮件地址不会被公开。 必填项已用*标注