核心
XMLHttpRequest,一个js对象,一个构造函数。
方法
- open():准备启动一个AJAX请求;
- setRequestHeader():设置请求头部信息;
- send():发送AJAX请求;
- getResponseHeader(): 获得响应头部信息;
- getAllResponseHeader():获得一个包含所有头部信息的长字符串;
- abort():取消异步请求;
- 另外,浏览器还为该对象提供了一个onreadystatechange监听事件,大明湖readyState属性改变时,就会触发该事件发送。
为了确保浏览器的兼容性,最好在调用open方法之前指定事件处理程序。
属性
- responseText:包含响应主体返回文本;
- responseXML:如果响应的内容类型时 text/xml或 application/xml,该属性将保存包含着相应数据的XML DOM文档;
- status:响应的HTTP状态;
- statusText:HTTP状态的说明;
- readyState:表示“请求”/“响应”过程的当前活动阶段
拓展
什么是ajax?ajax作用是什么?
1
ajax是用来与后台交互的一种技术。用来实现客户端服务器的异步通信效果,实现页面的局部刷新。
原生js ajax发送http请求需要几个步骤?分别是什么?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20//1:创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
//2:设置请求参数(请求方式,url,是否异步请求)
xhr.open("GET",url,false);
//3:设置请求头部(也可以不设置)
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//支持跨域发送cookie
xhr.withCredentials = true;
//4:发送请求
xhr.send(null);
//5:设置事件处理程序
xhr.onreadystatechange = function(){
if(xhr.readystate == 4){
if(xhr.status == 200){
console.log(xhr.responseText);
}else{
console.log("出错了");
}
}
}readyState的取值?
1 | 0:(未初始化)还没有调用open()方法。 |
- http的请求方法
1 | get:获取服务器中的资源。 |
- get和post的区别
1 | 1. 发送方式:get请求传送的参数放在url上,即http的协议头;post把传送的参数放在http的包体中。 |
什么情况造成跨域?如何解决?
1
2
3
4
5
6
7
8
9受同源策略限制。协议、子域名、主域名、端口号、ip地址、网址,任一不同都为不同源。
1. jsonp 只能解决get跨域
2. CORS:跨域资源共享,通过设置Access-Control-Allow-Origin来允许跨域(主要后台配置)
3. 设置document.domain
4. 代理请求解决接口跨域。
jsonp通过script标签进行跨域请求
①前端设置好回调函数,将回调函数名作为url携带的参数。
②后端接到请求后,生成一个函数,函数名为前端传来的回调函数名,数据作为参数传入函数,返回js文档。
③客户端解析并执行返回的js文档,将返回的数据传入回调函数执行。http状态码(status)
状态码 | 含义 |
---|---|
1xx | 请求正在被处理 |
2xx | 请求成功被处理 |
3xx | 请求需求附加操作,如重定向 |
4xx | 客户端出错导致请求无法被处理 |
5xx | 服务端处理出错 |
常用状态码
- 200 请求成功处理,一切正常
- 301 永久重定向(新网址替换旧网址,旧网址清零)
- 302 临时重定向(也是替换,但是旧网址还能参与排名)
- 304 资源未修改
- 403 禁止访问
- 404 页面未找到
- 405 不允许此请求方法
- 500 服务器出错
回调函数
1
2
31.一个函数作为参数传递给另一个函数,在功能下载完成后执行,作为参数的函数即为回调函数。
2.可用于解决异步。
3.典型例子即为ajax请求。回调地狱
1
2
3
4
5当许多功能需要连续调用,环环相扣依赖时。就会产生函数作为参数层层嵌套的一个效果,这就形成回调地狱。使得代码变得难以理解与维护。
解决:
1.保持代码简短,避免使用匿名函数。
2.模块化。将不同功能的代码封装成不同的模块。
3.处理每一个错误。为了让代码稳定,永远无法知道这些错误何时发生,所以必须对它们进行计划。