Ajax-前端

Ajax是什么?如何创建一个Ajax?

  • Ajax 并不算是一种新的技术,全称是asychronous javascript and xml,可以说是已
    有技术的组合,主要用来实现客户端与服务器端的异步通信效果,实现页面的局部刷新,早
    期的浏览器并不能原生支持ajax,可以使用隐藏帧(iframe)方式变相实现异步效果,后
    来的浏览器提供了对ajax 的原生支持

  • 使用ajax 原生方式发送请求主要通过XMLHttpRequest( 标准浏览器) 、ActiveXObject(IE 浏览器)对象实现异步通信效果,步骤如下:

var xhr =null;//创建对象
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open(“方式”,”地址”,”标志位”);//初始化请求
xhr.setRequestHeader(“”,””);//设置http 头信息
xhr.onreadystatechange =function(){}//指定回调函数
xhr.send();//发送请求

ajax过程
1. 创建XMLHttpRequest 对象,也就是创建一个异步调用对象
2. 创建一个新的HTTP 请求,并指定该HTTP 请求的方法、URL 及验证信息
3. 设置响应HTTP 请求状态变化的函数
4. 发送HTTP 请求
5. 获取异步调用返回的数据
6. 使用JavaScript 和DOM 实现局部刷新

同步和异步的区别

同步是阻塞模式,异步是非阻塞模式。
1. 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;
2. 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

如何解决跨域问题

理解跨域的概念:协议、域名、端口都相同才同域,否则都是跨域。
出于安全考虑,服务器不允许ajax 跨域获取数据,但是可以跨域获取文件内容,所以
基于这一点,可以动态创建script 标签,使用标签的src 属性访问js 文件的形式获取js
脚本,并且这个js 脚本中的内容是函数调用,该函数调用的参数是服务器返回的数据,为
了获取这里的参数数据,需要事先在页面中定义回调函数,在回调函数中处理服务器返回的
数据,这就是解决跨域问题的主流解决方案

页面编码和被请求的资源编码如果不一致如何处理

对于ajax 请求传递的参数,如果是get 请求方式,参数如果传递中文,在有些浏览器会乱码,不同的浏览器对参数编码的处理方式不同,所以对于get 请求的参数需要使用encodeURIComponent 函数对参数进行编码处理,后台开发语言都有相应的解码api。对于post 请求不需要进行编码。

阐述一下异步加载

  1. 异步加载的方案: 动态插入script 标签
  2. 通过ajax 去获取js 代码,然后通过eval 执行
  3. script 标签上添加defer 或者async 属性
  4. 创建并插入iframe,让它异步执行js

请解释一下JavaScript 的同源策略

同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。所谓同源指的是:协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。

GET 和POST 的区别,何时使用POST

  • GET:一般用于信息获取,使用URL 传递参数,对所发送信息的数量也有限制,一般在2000 个字符,有的浏览器是8000 个字符
  • POST:一般用于修改服务器上的资源,对所发送的信息没有限制
    在以下情况中,请使用POST 请求:
    1. 无法使用缓存文件(更新服务器上的文件或数据库)
    2. 向服务器发送大量数据(POST 没有数据量限制)
    3. 发送包含未知字符的用户输入时,POST 比GET 更稳定也更可靠

ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?

  1. 通过异步模式,提升了用户体验
  2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
  3. Ajax 在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下
    的服务器负载。

Ajax 的最大的特点是什么

Ajax 可以实现异步通信效果,实现页面局部刷新,带来更好的用户体验;按需获取数
据,节约带宽资源;

ajax 的缺点

1、ajax 不支持浏览器back 按钮。
2、安全问题AJAX 暴露了与服务器交互的细节。
3、对搜索引擎的支持比较弱。
4、破坏了程序的异常机制。

ajax 请求的时候get 和post 方式的区别

  • get 一般用来进行查询操作,url 地址有长度限制,请求的参数都暴露在url 地址当中,如果传递中文参数,需要自己进行编码操作,安全性较低。
  • post 请求方式主要用来提交数据,没有数据长度的限制,提交的数据内容存在于http请求体中,数据不会暴漏在url 地址中。

解释jsonp 的原理,以及为什么不是真正的ajax

Jsonp 并不是一种数据格式,而json 是一种数据格式,jsonp 是用来解决跨域获取数据
的一种解决方案,具体是通过动态创建script 标签,然后通过标签的src 属性获取js 文件
中的js 脚本,该脚本的内容是一个函数调用,参数就是服务器返回的数据,为了处理这些
返回的数据,需要事先在页面定义好回调函数,本质上使用的并不是ajax 技术

什么是Ajax 和JSON,它们的优缺点

  • Ajax 是全称是asynchronous JavaScript andXML,即异步JavaScript 和xml,用于在
    Web 页面中实现异步数据交互,实现页面局部刷新。
    优点:可以使得页面不重载全部内容的情况下加载局部内容,降低数据传输量,避免用
    户不断刷新或者跳转页面,提高用户体验
    缺点:对搜索引擎不友好;要实现ajax 下的前后退功能成本较大;可能造成请求数的
    增加跨域问题限制;
  • JSON 是一种轻量级的数据交换格式,ECMA 的一个子集
    优点:轻量级、易于人的阅读和编写,便于机器(JavaScript)解析,支持复合数据类
    型(数组、对象、字符串、数字)

HTTP 状态码都有那些。

200 OK //客户端请求成功
301 - 资源(网页等)被永久转移到其它URL
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

一个页面从输入URL 到页面加载显示完成,这个过程中都发生了什么?

分为4 个步骤:
1. 当发送一个URL 请求时,不管这个URL 是Web 页面的URL 还是Web 页面上每个资源
的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS 服务器上启动一个DNS
查询。这能使浏览器获得请求对应的IP 地址。
2. 浏览器与远程Web 服务器通过TCP 三次握手协商来建立一个TCP/IP 连接。该握手包
括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在浏览器和服务器之间
传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由
客户端发出该请求已经被接受的报文。
3. 一旦TCP/IP 连接建立,浏览器会通过该连接向远程服务器发送HTTP 的GET 请求。远
程服务器找到资源并使用HTTP 响应返回该资源,值为200 的HTTP 响应状态表示一个正
确的响应。
4. 此时,Web 服务器提供资源服务,客户端开始下载资源。

ajax 请求时,如何解释json 数据

使用eval() 或者JSON.parse() 鉴于安全性考虑,推荐使用JSON.parse()更靠谱,对
数据的安全性更好。

javascript 的本地对象,内置对象和宿主对象

  • 本地对象为独立于宿主环境的ECMAScript 提供的对象,包括Array Object RegExp 等
    可以new 实例化的对象
  • 内置对象为Gload,Math 等不可以实例化的(他们也是本地对象,内置对象是本地对象
    的一个子集)
  • 宿主对象为所有的非本地对象,所有的BOM 和DOM 对象都是宿主对象,如浏览器自带的
    document,window 等对象

为什么利用多个域名来存储网站资源会更有效?

确保用户在不同地区能用最快的速度打开网站,其中某个域名崩溃用户也能通过其他郁
闷访问网站,并且不同的资源放到不同的服务器上有利于减轻单台服务器的压力。

请说出三种减低页面加载时间的方法

1、压缩css、js 文件
2、合并js、css 文件,减少http 请求
3、外部js、css 文件放在最底下
4、减少dom 操作,尽可能用变量替代不必要的dom 操作

猜你喜欢

转载自blog.csdn.net/mangxi8200/article/details/81165562