欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS实现AJAX请求_2

程序员文章站 2022-04-10 14:38:03
...

JS实现AJAX请求_2(进阶篇)

问题:当多次调用同一个AJAX请求时,可能会遇到服务器的数据发生改变了,但是在浏览器中获取的数据没有同步的问题。问题的原因在于浏览器的缓存。这种情况一般只发生在GET请求中。

 

避免GET缓存:

使用无意义的参数避免缓存:

//这里只针对非IE的浏览器了,IE也是如此,只有对象的创建不同罢了
var xmlHttp=new XMLHttpRequest();
var timer=new Date().getTime();//获取当前的时间,每次请求时的时间是不同的
xmlHttp.open("GET","ajax.do?temp="+timer,true);
xmlHttp.send();

 

在服务端添加响应头:

//在servlet中添加响应头
response.setContentType("text/html;charset=UTF-8");
response.addHeader("pragma","no-cache");
response.addHeader("cache-control","no-cache");
response.addHeader("expires","0");
//这三个响应头告诉浏览器不使用缓存

 

 问题:当我们使用GET请求传参中有中文时,会出现乱码的情况,POST请求转码比较简单。

 

AJAX对中文的支持:

GET请求:

//js传中文
var xmlHttp=new XMLHttpRequest();
var v=encodeURIComponent("这是汉字");//将中文包裹起来
xmlHttp.open("GET","ajax.do?param="+v);
xmlHttp.send();

 

//servlet中
String v=request.getParameter("param");//接收请求地址中的param的值
v=new String(v.getBytes("ISO-8859-1"),"UTF-8");//将原数据重新编码为UTF-8格式

 POST请求:

//js
var xmlHttp=new XMLHttpRequest();
xmlHttp.open("POST","ajax.do");
xmlHttp.send("v=这是汉字");//不用包裹起来

 

//servlet中
request.setCharacterEncoding("UTF-8");//这里设置请求的编码格式即可
String v=request.getParameter("v");//v=这是汉字

 

总结:

  • 避免GET缓存
  • 对中文的支持
  • 字符转码

结语:

对所有的请求习惯性在servlet中都设置编码格式

  request.setCharacterEncoding("UTF-8");

  response.setCharacterEncoding("UTF-8");

GET请求中有中文时,将中文包裹起来,英文也可以包裹,没有什么影响。