ajax 의 IE cache 관련 문제 해결

2522 단어 ajaxcacheie
Ajax 를 이용 하여 이름 검 사 를 했 습 니 다.첫 번 째 는 유효 하지만 제출 한 후에 다시 한 번 검 사 를 했 습 니 다.결 과 는 틀 렸 습 니 다.IE 의 cache 때 문 입 니 다
 
function verify() {
$.ajax({
//issue for IE cache; timestamp=" + new Date().getTime()
url:"checkGroupName?timestamp=" + new Date().getTime(),
async: true,
data:"groupName=" + $("#cn").val()+"&groupTypeForDetail="+$("#groupType").val()+"&prefix="+$("#p").val(),
dataType:"html",
success:function(data){
if(data==1){
$("#result").html("<font color='green'>Group name["+$("#p").val()+ $("#cn").val()+"]Valid</font>");
$("#email").val($("#p").val()+ $("#cn").val()+$("#emailHidden").val());
$('#subData').removeAttr("disabled");
}else if(data==2){
$("#result").html("<font color='red'>Group name["+$("#p").val()+ $("#cn").val()+ "]already existed.</font>");
$('#subData').attr('disabled',"true");
}else{
$("#result").html("<font color='red'>Group name can not be empty.</font>");
$('#subData').attr('disabled',"true");
}
}
});
}
원리:Firefox 는 매번 request 에 다시 server 로 돌아 가 최신 데 이 터 를 얻 지만 IE 는 다 릅 니 다.cache 가 살 기 전에 얻 은 데 이 터 는 첫 번 째 request 에 만 서버 에서 데 이 터 를 읽 기 때문에 ajax 데 이 터 는 시간 에 따라 새 로 워 지지 않 습 니 다.솔 루 션(인터넷 에서 수집 한):1.서버 에 header("Cache-Control:no-cache,must-revalidate")를 추가 합 니 다.또는 아래 의 조합 을 사용 하 는 것 이 좋 습 니 다
 
header("Expires: Sat, 1 Jan 2005 00:00:00 GMT");
header("Last-Modified: ".gmdate( "D, d M Y H:i:s")."GMT");
header("cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
2.ajax 가 요청 을 보 내기 전에 xmlHttpRequest.setRequestHeader("If-Modified-Since","0")를 추가 합 니 다.3.ajax 에서 요청 을 보 내기 전에 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache")를 추가 합 니 다.4.Ajax 의 URL 인자 뒤에'?fresh=" + Math.random(); //물론 여기 서 파 라 메 터 fresh 는 5,네 번 째 방법 과 세 번 째 유사 한 것 을 임의로 취 할 수 있 습 니 다.URL 파 라 메 터 를 추가 한 후에'?timestamp=" + new Date().getTime(); //이런 방식 을 추천 합 니 다.제 가 사용 하 는 것 은 바로 이런 것 입 니 다.개인 적 으로 편리 하 다 고 생각 합 니 다.6.GET 대신 POST 사용:추천 하지 않 음

좋은 웹페이지 즐겨찾기