发送请求的四个步骤
- 四个步骤
let xhr = new XMLHttpRequest()
xhr.open(请求方式,请求地址,是否异步)
xhr.send()
xhr.onload = function(){}
xhr.onreadystate = function(){
if(xhr.readystate===4){
console.log(xhr.responseText)
}}
ajax的状态码
== 0 表示你创建成功了一个ajax对象
== 1 表示配置请求信息成功了(也就是执行完了open)
== 2 表示响应体已经回到了浏览器,但是还不能使用(因为此时还是一个响应报文)
== 3 表示浏览器正在解析响应报文(把响应报文里的响应体分离出来)
== 4 浏览器分离响应体成功,已经可以正常使用了(本次请求就结束了)
ajax带有参数的get和post请求
发送带有参数的get请求
- 参数拼接在地址后面
- ?key1=value1&key2=value2
发送带有参数的post请求
- 参数写在请求体里面,要设置请求头
- xhr.setRequestHeader(‘content-type’,‘appliaction/x-www-form-urlencoded’)
- xhr.send(‘key1=value1&key2=value2’)
ajax的兼容处理
- 兼容处理,将来在你开发过程中
== 可能兼容ie678浏览器
== 就要处理兼容问题 - 我们的ajajx有两个地方不兼容
1 创建ajax对象的时候不兼容
+ new XMLHttpRequest =》 标准浏览器
+ new ActiveXObject =》 ie低版本
2 接收响应的不兼容
+ 标准浏览器 =》onload事件
+ ie低版本 =》没有onload事件
==ie低版本只有onreadystatechange事件
==ie低版本接收响应只能使用onreadystatechange事件
== 在这个事件里面进行判断
+ 判断ajax是否结束了 -》ajax的状态码为4就是结束了
+ 判断本次http请求成功了 =》http的响应状态码200-299之间
== xhr.status 记录的就是本次请求的http的状态码
IE的问题
== 创建ajax对象这个事情
== 必须是真实的IE678浏览器才没有
== 如果你使用IE11浏览器的模拟器,但是浏览器的内核依旧是IE11的内核
== 你看不出来他不能用
同源策略
概念:浏览器对js的一种限制,防止跨站攻击
当我们访问其他服务器的时候会触发同源策略(也叫跨域请求)
解决同源策略的三种方法
cors - 后端设置允许跨域请求头
php设置以下: // 允许哪些域名请求我 header("Access-Control-Allow-Origin:*"); // 允许哪些请求方式 header("Access-Control-Request-Methods:GET,POST,PUT,DELETE,OPTIONS"); // 允许携带哪些请求头信息 header('Access-Control-Allow-Headers:x-requested-with,content-type,test-token,test-sessid');
proxy - 在同源服务器设置代理服务器
例如在nginx的配置文件里书写代理配置: location = /tv { proxy_pass http://127.0.0.1/data/proxy.php; } 请求地址书写/tv就可以通过nginx服务器帮我们访问我们所需要的东西
jsonp - 提起设置一个函数,script请求后端的地址,后端返回一个函数调用,传入的实参就是要给前端的数据
在js中书写一个函数,通过JavaScript的src引入需要的php文件,php文件把数据写成js函数形参,当引入php文件后执行函数,就可以拿到后端返回的数据
版权声明:本文为qq_52400625原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。