【前端】javascript__ajax基础知识入门

文章题目采纳BEM定名范例。
由于笔者想从新夯实一下手艺,因而翻译了MDN上的ajax引见。英文原文

Ajax是啥

Ajax全名是Asynchronous javascript and xml,是一种运用xmlhttprequest对象与服务端剧本通讯的机制。Ajax可以传输的数据花样包含JSON、XML、HTML和text文件。Ajax对Web运用带来庞大的革新的重要原因是,Ajax支撑异步,一个页面可以在不举行整页革新的情况下举行部分元素革新,这个机制使得Web运用的交互体验更多的靠近桌面运用。

Ajax的两大特征:

  • 不必革新页面即可向服务器要求数据

  • 可以从服务端要求数据并举行处置惩罚

第一步:怎样提议HTTP要求

为了可以经由过程javascript建立一个HTTP要求,你须要一个完成该功用的实体类,也就是XMLHttpRequest。一最先,由IE起首提出了一个叫做XMLHTTP的ActiveX 对象,然后火狐,safari和其他浏览器也最先在浏览器中内置XMLHttpRequest对象来完成XMLHttp的功用。所以,实际上是由微软发清楚明了XMLHttpRequest。

//仅用于外表二者的关联,如今并不须要如许,XMLHTTPRequest已被一切浏览器支撑

if(window.XMLHttpRequest){    
   httpRequest = new XMLHttpRequest();
}
else if(window.ActiveXObject){    
   httpRequest = new ActiveXObject();
}

接下来,你须要决议要求到的数据,怎样处置惩罚。此时,你须要通知XMLHttpRequest对象用什么js函数来处置惩罚接见要求。将用于处置惩罚要求的函数绑定在xmlhttprequest对象的onreadystatechange事宜上即可。

httpRequest.onreadystatechange = function(){ //这里放要求的处置惩罚逻辑。 }

如今,你可以最先提议要求了,要求对象的open和send要领可以用于提议要求。

httpRequest.open('Get','http://example.com',true);
httpRequest.send(null);
  • open()是Http要求要领,第一个参数为要求范例,比方GET、POST、HEAD等(为了保证每一个浏览器都能辨认,这里请运用大写)。更多的Http要求信息请检察W3C specs

  • 第二个元素是与要求的URL地点,牢记不可跨域接见。假如确实想跨域,请检察HTTP access control

    • 第三个元素是掌握是不是是异步要求。TRUE代表异步,FALSE代表同步。

在运用POST要求时,你可以运用send()要领发送数据,花样可所以XML、JSON、SOAP等,也可所以查询字符串:

"name=value&anothername="+encodeURIComponent(myVar)+"&so=on"

在发送要求前,你还须要设置一下要求的MIME范例。

httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

第二步 处置惩罚服务器返回

上面已讲了,你可以设置js要领来处置惩罚服务器要求。

httpRequest.onreadystatechange = nameOfTheFunction;

起首,这个函数须要跟踪要求的状况变化。假如状况返回值为XMLHTTPRequest.DONE(4),代表服务器相应完成,不然,你须要继承跟踪状况。

if(httpRequest.readyState == XMLHttpRequest.DONE){
  //返回数据接收到的处置惩罚流程
}else{
  //要求还在继承
}

状况经由过程readyState来跟踪,状况的罗列值以下:

  • 0(uninitialized)// 要求对象已建立,还没有完成初始化(open要领还未挪用)

  • 1(loading)//open要领已挪用,send要领还未挪用

  • 2(loaded) //send要领已挪用,还没猎取到数据返回

  • 3(interactive) //一些数据已返回,responseText还没完整返回

  • 4(complete) //说有要求数据已返回

下一个事变,是须要搜检HTTP的服务端返回码。运用200 ok来推断要求是不是胜利。

if(httpRequest.status === 200){
  //胜利要求
}else{
  //要求有题目,比方404(要求地点没找到)500(内部服务器毛病)
}

一切的服务端返回码请检察W3C site

如今,在你搜检完要求状况和HTTP状况码后,你可以最先为所欲为的处置惩罚要求数据了。你可以运用下面两种数据情势:

  • httpRequest.responseText -以文本花样返回数据

  • httpRequest.responseXML -以XML对象情势返回数据,后续可以在JS中转化为JS对象

注重:上面说的流程是异步流程,在同步流程中,不必这么贫苦,你可以在send()要领后直接猎取要求数据。

第四步 示例

示例项就不翻译了,感兴趣的童鞋可以检察原文示例

    原文作者:守望者
    原文地址: https://segmentfault.com/a/1190000008056036
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞