ajax 与 jquery.ajax的详解
2021-03-03 05:25
标签:div 参数 gettime === cat 冲突 indexeddb index 资料 ajax原生写法 一.get写法 二.post写法 说明xhr.readyState 的几种状态 说明xhr.status情况 jquery的ajax使用 get的使用 ajax 中get 和post使用问题 使用get遇到的问题: 1.问题一. 缓存:当每次访问的url相同,客户端直接读取本地缓存里面的内容,即使后台数据变化前台也不会有变化; 解决方法:在?后面链接一个num=【随机数Math.random()】或者num=【时间戳new Date().getTime()】,‘1.php?username="May"&‘+num(这里没有变量名,避免和后台参数冲突) 2.问题二. 乱码,当传递中文或者特殊字符的时候,前台显示出现乱码 解决办法:使用编码encodeURI(‘蜗牛‘) 测试结果:通过使用Chrome测试,结果get的两种问题,都已经得到了解决 使用post遇到的问题: post方式,数据放在send()里面作为参数传递; 问题:当没有设置请求头的时候,后台直接不对数据进行处理;前台就无法获得后台返回的数据 解决方法:手动设置请求头(xhr.setRequestHeader(‘content-type‘,‘application/x-www-form-urlencoded‘)),声明发送的数据类型 【注】post没有缓存问题,没有编码问题(因为在请求头里面已经进行了声明) 测试结果:通过使用Chrome测试,结果post这个没有声明头部信息,问题是存在的 参考资料来源 : https://www.cnblogs.com/liu-fei-fei/archive/2004/01/13/5624075.html 看到get请求会导致缓存,就在想为啥我的每次请求没有缓存呢,原因是什么,那么又该如何去解决 如何去实践的,在chrome中,ajax不会存储,所以就通过原生ajax在ie中写,结果是的确有缓存.
ajax 与 jquery.ajax的详解 标签:div 参数 gettime === cat 冲突 indexeddb index 资料 原文地址:https://www.cnblogs.com/zmztya/p/14293294.html//创建对象
let xhr = new XMLHttpRequest()
xhr.open(‘get‘,"url?name=&age=") //查询字符串
xhr.send(null) 请求体
xhr.onreadystatechange = function(){
if(xhr.readyState ===4)
{
if(xhr.status ===200)
{
}
}
}
分析:
get有 请求行 xhr.open(‘get‘,‘url?name=&age=‘)
get有 请求头 可以忽略
get有 请求体 xhr.send(null)let xhr = new XMLHttpRequest()
xhr.open(‘post‘,‘url‘)
xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘) //固定写法,重点记忆
xhr.send(‘name=&age=‘)
xhr.onreadystatechange = function(){
if(xhr.readyState ===4)
{
if(xhr.status ===200)
{
}
}
}
分析:
post有 请求行 xhr.open(‘post‘,‘url‘)
post有 请求头 xhr.setRequestHeader(‘Content-Type‘,‘application/x-wwww-form-urlencoded‘)
post有 请求体 xhr.send(‘name=&age=‘)
0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了
在FF,Chrome中使用jquery ajax请求得到的数据浏览器不会自动存储,因为jquery给他们加上一个类似于时间戳的特殊标识,
使得每次都是不同的请求,取新数据去缓存,缓存也就没有起作用。所以你即使给ajax参数cache设为true也没有作用。
(而IE和别的上述浏览器的缓存机制不一样,它不做添加啥都存,你想不用缓存都不行)。另外jquery的这个cache参数(它默认值就是true...)
只是控制它能控制范围内的缓存,也就是false时不使用浏览器缓存而直接去请求url,而true的时候就使用缓存,这里它可能有点用词不当。
最后既然你想做异步的数据获取,如果你在缓存的环节直接控制死了cache,这样你是没办法得到原接口有了更新之后的数据的,
所以建议更好的方法是自己做本地存储(Web Storage),只有存储到web storage API中才能稳定持久保存,常见的浏览器本地存储有:
localStorage、sessionStorage、cookie、UserData、webSQL、indexeddb等,具体的用法请查相关资料。
参考来源链接:https://www.zhihu.com/question/67582246/answer/254444946