[jquery] jQuery .load 응답이 캐시되지 않도록 중지
URL에 GET 요청을하는 다음 코드가 있습니다.
$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());
});
그러나 반환 된 결과가 항상 반영되는 것은 아닙니다. 예를 들어 스택 추적을 뱉어내는 응답을 변경했지만 검색 버튼을 클릭해도 스택 추적이 나타나지 않았습니다. 나는 아약스 응답을 제어하는 기본 PHP 코드를 보았고 올바른 코드를 가지고 페이지를 직접 방문하면 올바른 결과를 보여 주었지만 .load가 반환 한 출력은 오래되었습니다.
브라우저를 닫았다가 다시 열면 한 번 작동하고 오래된 정보가 반환되기 시작합니다. jQuery로 이것을 제어 할 수 있습니까? 아니면 캐싱을 제어하기 위해 PHP 스크립트 출력 헤더가 필요합니까?
답변
$.ajax()
요청별로 캐싱을 제어하려는 경우 와 같이보다 복잡한 기능을 사용해야 합니다. 또는 모든 것을 위해 끄려면 스크립트 맨 위에 놓으십시오.
$.ajaxSetup ({
// Disable caching of AJAX responses
cache: false
});
답변
요청별로 캐싱을 제어하는 방법의 예는 다음과 같습니다.
$.ajax({
url: "/YourController",
cache: false,
dataType: "html",
success: function(data) {
$("#content").html(data);
}
});
답변
한 가지 방법은 URL 끝에 고유 번호를 추가하는 것입니다.
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val()+'&uid='+uniqueId());
호출 할 때마다 다른 것을 반환하기 위해 uniqueId ()를 작성하는 경우
답변
서버에서 데이터를 가져와야 할 때만 아래 줄을 넣는 또 다른 방법은 아약스 URL과 함께 아래 줄을 추가하십시오.
‘? _ =’+ Math.round (Math.random () * 10000)
답변
/**
* Use this function as jQuery "load" to disable request caching in IE
* Example: $('selector').loadWithoutCache('url', function(){ //success function callback... });
**/
$.fn.loadWithoutCache = function (){
var elem = $(this);
var func = arguments[1];
$.ajax({
url: arguments[0],
cache: false,
dataType: "html",
success: function(data, textStatus, XMLHttpRequest) {
elem.html(data);
if(func != undefined){
func(data, textStatus, XMLHttpRequest);
}
}
});
return elem;
}
답변
Sasha는 좋은 생각입니다, 나는 혼합을 사용합니다.
함수를 만듭니다
LoadWithoutCache: function (url, source) {
$.ajax({
url: url,
cache: false,
dataType: "html",
success: function (data) {
$("#" + source).html(data);
return false;
}
});
}
그리고 init와 같이 내 페이지의 다른 부분을 호출하십시오.
초기화 : 함수 (actionUrl1, actionUrl2, actionUrl3) {
var ExampleJS = {
Init: function (actionUrl1, actionUrl2, actionUrl3) ExampleJS.LoadWithoutCache(actionUrl1, "div1");
예 : JS.LoadWithoutCache (actionUrl2, “div2”); 예 : JS.LoadWithoutCache (actionUrl3, “div3”); }},
답변
이것은 IE의 특별한 성가심입니다. 기본적으로 서버의 응답과 함께 ‘캐시 없음’HTTP 헤더를 다시 보내야합니다.