请简述XMLHttpRequest、JSONP的适用场景,并针对两种请求形式简述如何检测请求错误

时间:2024-03-16 11:25:55

  1. XMLHttpRequest用于浏览器端与服务器端异步请求数据从面实现对页面的无刷新修改,支持GET/POST请求,一般用于非跨域的场景。如果需要使用XMLHttpRequest跨域请求数据,需要通过CORS头支持。 JSONP用于跨域请求数据的场景,只支持GET请求。
  2. XMLHttpRequest异常判断一般通过该对象的readystate和http状态码status来判断,JSONP的异常判断一般是onerror事件和超时timer来判断。

XMLHttpRequest

XMLHttpRequest是一个API内置对象,用来实现浏览器端与服务器端异步请求,实现http通信,适用于不刷新整个页面就能更新局部数据的场景,是我们熟悉的Ajax。,错误检测是该对象的readystate和status来判断:readyState表示当前XMLHttpRequest对象处于什么状态,
0:初始化,XMLHttpRequest对象还没有完成初始化
1:载入,XMLHttpRequest对象开始发送请求
2:载入完成,XMLHttpRequest对象的请求发送完成
3:解析,XMLHttpRequest对象开始读取服务器的响应
4:完成,XMLHttpRequest对象读取服务器响应结束
status能获取服务端的http响应状态码,当readystate===4时根据status时状态码可以判断http请求错误

JSONP

jsonp的核心原理就是目标页面回调本地页面的方法,并带入参数。

由于浏览器的安全限制,数据不可以直接跨域,需要通过在授权的数据返回里设置jsonp来让该接口允许所有的调用者获取数据。

jsonp可以将目标代码作为js的形式加载过来
还可以直接利用jquery的ajax请求jsonp

JSONP是一种解决跨域的方式,原理应用< script >< img>< iframe>这些标签不受同源限制,JSONP的异常判断一般是onerror事件和超时timer来判断

同步与异步请求

同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

跨域请求

跨域请求:当前发起请求的域与该请求指向的资源所在的域不同时的请求。这里的域指的是这样的一个概念:我们认为如果 “协议 + 域名 + 端口号” 均相同,那么就是同域。

GET请求与POST请求

get请求是向服务器索要数据,post请求是向服务器传送数据 的,浏览器限制了get的传送量,post可以大量的把数据传给 服务器,一般情况下get请求,请求体是空的,请求只发一次 ,如果是post请求,数据会放入请求体中,并且会根据请求头 里content-length的长度分两次或多次传给服务器,直到与 content-length的长度相等时断开传送
grt和post请求服务器数据可以说都是不安全的,传送和接收 都是明文以字符串形式交互数据的,想要安全,请求之前需要 加密处理,
请简述XMLHttpRequest、JSONP的适用场景,并针对两种请求形式简述如何检测请求错误