热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript中几个主要的知识点(3)Ajax

JavaScript中几个最重要的大知识点面向对象DOM事宜异步交互ajaxAJAXAJAX是异步的javascript和xml(AsynchronousJavascriptAnd

Javascript中几个最重要的大知识点

  1. 面向对象

  2. DOM事宜

  3. 异步交互ajax

AJAX

AJAX是异步的Javascript和xml(Asynchronous Javascript And XML)的缩写,用于网页部份革新,提拔用户阅读体验

平常前端顺序员关于AJAX的控制仅仅停留在会用AJAX发送要求,将取得的数据衬着到DOM中即可,如果看这篇文章的你是出于这个目标,那末下面的两个代码示例就可以处置惩罚你的问题了。

  • 原生JS写法:

var xhr=new XMLHttpRequest();
xhr.open("[method]","[url]",[true/false]); //true为异步,false为同步
xhr.Onreadystatechange=function(){
if(xhr.readystate===4 && xhr.status==200){
var result=xhr.responseText; //这里是效劳器端返回的数据
}
}
xhr.send(null); //如果须要向效劳器发送数据,则写入key=value&key=value情势的字符串

  • jQuery写法:

$.ajax({
url:"",
method:"",
dataType:"json",
async:true,
data:null, //须要向效劳器发送的数据,可所以对象情势
success:function(data){} //data为效劳器返回的数据
})

本文的重点不在于引见AJAX写法,而是AJAX所形成的前后端交互,下面将引见完全的前后端交互历程以及个中的一些细节东西。

客户端和效劳器端的交互

面试题:当你在阅读器的地点栏中输入一个网址,到阅读器显现这个网页中的内容,中心都阅历了哪些事变?

这个面试题粗略地考核了一下前后端交互的知识点,即客户端和效劳器端的交互模子“HTTP事件”,这个交互重要包含了以下几个阶段:

  • Request要求阶段

    1. 客户端起首经由过程域名,到DNS效劳器上,找到效劳器对应的外网IP地点

    2. 经由过程外网IP地点,找到对应的项目效劳器

    3. 经由过程端口号,在效劳上找到对应的项目资本文件目次(由于宣布项目标时刻,已把项目目次和项目端口号对应了)

  • Response相应阶段

    1. 效劳器端会把客户端须要要求的资本文件的源代码,返回给客户端的阅读器

    2. 客户端阅读器吸收到返回内容后,运用差别的代码剖析引擎举行衬着和剖析

看到这里,你也许会对上面一些名词有迷惑,下面临一些细节举行细致地形貌,以协助你明白以上的交互。

一个完全的URI:https://www.baidu.com:443/xxx…

  • URI:一致资本标识符

  • URL:一致资本定位符

  • URN:一致资本称号

  • URI=URL+URN

上述的一个完全的URI可以分6部份,前3部份为URL,后3部份为URN

  1. HTTP / HTTPS / FTP:传输协定

    • 阅读器默许运用HTTP,但网站可以举行重定向运用HTTPS

    • HTTP:超文本传输协定,客户端和效劳器端除了传输文本之外,还可以传输图片,音视频等富媒体资本(二进制文件流/BASE64……)

    • HTTPS:传输通道经由SSL加密HTTP,和付出有关的网站基础都是HTTPS传输协定

    • FTP:资本文件传输协定,常常应用于对效劳器资本文件的治理(上传和下载)

  2. 域名

    • 一级域名:www.qq.com

    • 二级域名:sport.qq.com

    • 三级域名:kbs.sport.qq.com

  3. 端口号

    • 80:HTTP默许

    • 443:HTTPS默许

    • 21:FTP默许

    • 端口号的取值局限:0-65535之间,端口号被一个项目或顺序占用,别的的顺序就不能再运用这个端口号了

  4. 要求资本文件的途径和称号

    • /student/index.html 要求的是当前项目student文件夹下的index.html文件

    • /index.html 要求的是当前项目根目次下的index.html文件,在不指定要求文件的时刻,默许要求的资本文件平常都是/index.html或许/default.html(可以在效劳器中设置默许的要求文件)

  5. 问号传参

    • ?key=value&key=value…

    • 客户端可以经由过程问号通报参数的体式格局,把一些信息通报给效劳器端

  6. 哈希值(HASH)

    • #video

    • 平经常使用于锚点定位或许完成页面的路由切换

HTTP报文:客户端通报给效劳器端的内容以及效劳器返回给客户端的内容统称为报文

  • 起始行:要求起始行、相应起始行

  • 首部(头):通用头、要求头、相应头、自定义(要求/相应)头

  • 主体:要求主体、相应主体

  1. 客户端都可以经由过程哪些体式格局把内容通报给效劳器呢?

    • 要求URL地点背面的问号传参(很经常使用)

    • 经由过程设置要求头信息,把内容通报给效劳器(要求头:客户端设置/效劳器端猎取)

    • 经由过程要求主体把信息通报给效劳器(要求主体:客户端设置/效劳器端猎取)

  2. 效劳器端怎样把内容返回给客户端?

    • 经由过程相应头把信息返回给客户端(相应头:效劳器端设置/客户端猎取)

    • 经由过程相应主体把信息返回给客户端(相应主体:效劳器端设置/客户端猎取)

实际上关于收集协定的知识点远不止这些,然则用于明白AJAX以及前后端交互已足够了,下面便可以对AJAX举行深切地明白了。

剖析AJAX步骤

1.建立一个对象(在IE6以及更低版本的阅读器中,不支撑XMLHttpRequest这个类,我们须要运用ActiveXObject来处置惩罚)

var xhr=new XMLHttpRequest;

2.翻开一个URL要求地点(发送要求前的一些设置)

  • 要求体式格局:GET系列(GET/DELETE/HEAD);POST系列(POST/PUT)

  • 要求地点:经由过程这个地点向效劳器发送数据要求,要求的地点平常都是背景供应的(API接口文档)

  • 设置同步异步:默许TRUE异步,设置为FALSE为同步

    xhr.open("GET","URL",true);

3.监听AJAX状况的转变,完成差别的营业操纵

  • 0:UNSENT 未发送

  • 1:OPENED 已翻开,就是已实行完成第二步操纵了

  • 2:HEADERS_RECEIVED 客户端已吸收到效劳器返回的相应头信息

  • 3:LOADING 效劳器返回的主体内容正在传输中

  • 4:DONE 相应主体内容已被客户端吸收

    xhr.Onreadystatechange=function(){
    if(xhr.readyState===4 && xhr.status===200){
    var result=xhr.responseText;
    }
    }

xhr.status:HTTP状况码,经由过程状况码可以晓得当前HTTP事件是不是胜利,以及失利的缘由

  • 2开首:代表胜利

    • 200:OK 要求已胜利

  • 3开首:也代表胜利,然则这个胜利阅历了一些迥殊的处置惩罚

    • 301:Moved Permanently 在新版本HTTP协定中,它代表永远转移(在之前的版本中它代表永远重定向)

    • 302:Move temporarily 在新版本HTTP协定中,它代表暂时转移(在之前的版本中代表暂时重定向,新版本中307代表暂时重定向) => “效劳器负载平衡”

    • 304:Not Modified 读取的是缓存中的数据(网站机能优化的一个迥殊重要的手腕:我们平常会把静态的资本文件CSS/JS/IMG做304缓存)

  • 4开首:代表毛病,而且平常都是客户端的毛病

    • 400:Bad Request 要求参数毛病

    • 401:Unauthorized 无权接见

    • 403:Forbidden 效劳器已明白要求,然则谢绝实行它。与401相应差别的是,身份验证并不能供应任何协助,而且这个要求也不该该被反复提交。如果这不是一个 HEAD 要求,而且效劳器愿望可以讲清楚为什么要求不能被实行,那末就应该在实体内形貌谢绝的缘由。固然效劳器也可以返回一个404相应,如果它不愿望让客户端取得任何信息

    • 404:Not Found 要求的地点不存在

    • 413:Request Entity Too Large 客户端通报给效劳器的内容凌驾了效劳器情愿吸收的局限

  • 5开首:代表毛病,而且平常都是效劳器端毛病

    • 500:Internal Server Error 效劳器的未知毛病

    • 503:Service Unavailable 效劳器超负荷

xhr对象中的一些属性和要领

  • xhr.response:猎取相应主体内容(平常不必)

  • xhr.responseText:猎取相应主体内容,而且猎取的内容是文本花样(字符串)

  • xhr.responseXML:猎取相应主体内容是XML花样(XML文档)

  • xhr.getResponseHeader([key]):猎取相应头信息

  • xhr.timeout:设置AJAX要求的超时时候,如果当前要求凌驾这个时候,代表超时,AJAX要求完毕,并且会触发ontimeout事宜

  • xhr.abort():中缀当前AJAX要求,xhr.onabort就是当要求被中缀时触发的事宜

  • xhr.setRequestHeader([key],[value]):设置要求头信息,[value]不能是中文汉字,如果须要通报中文汉字,须要先把通报的内容举行编码由效劳器举行解码,比方:xhr.setRequestHeader(“ajax”,encodeURIComponent(“前后端交互”));

编码解码体式格局:

  • escape / unescape:这类体式格局常常应用于客户端对中文汉字举行编码(不经常使用,由于效劳器端大部份言语,除了NODE,别的都不支撑这个编码体式格局)

  • encodeURI / decodeURI:根据UNICODE编码解码

  • encodeURIComponent / decodeURIComponent:相对于上面的要领来讲可以把迥殊字符也举行编码,而encodeURI只能编码中文汉字

4.发送AJAX要求,AJAX要求这件事从实行SEND后才最先(之前都是在做预备),当readState===4的时刻这件事完毕;
SEND要领中写的内容就是客户端经由过程要求主体通报给效劳器的内容,不想经由过程要求主体通报内容写null

xhr.send(null);

至此,全部AJAX要求完成,预计你对前后端交互也有一个大抵的了解了。


推荐阅读
author-avatar
涂涂2502863547_341
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有