2010-02-22 9 views
3

나처럼 많은 잃어버린 영혼들처럼, 나는 Ajax 양식 제출 및 IE 브라우저 캐싱 인 뱀 구멍에서 허우적 거리다.IE 브라우저 캐싱 및 jQuery 양식 플러그인

저는 Wordpress 의견 Ajaxify에 jQuery Form Plugin을 사용하여 간단한 스크립트를 작성하려고합니다. Firefox, Chrome, Safari 등에서 잘 작동합니다. 하지만 IE에서는 응답 텍스트가 캐싱되어 Ajax가 잘못된 주석을 사용하고 있습니다.

jQuery(this).ajaxSubmit({ 
     success: 
      function(data) { 
       var response = $("<ol>"+data+"</ol>"); 
       response.find('.commentlist li:last').hide().appendTo(jQuery('.commentlist')).slideDown('slow'); 
      }   
     }); 

ajaxSubmit은 WP-의견-post.php하는 inelegantly 응답으로 전체 페이지를 다시 뱉어, 주석을 보냅니다. 그래서 두꺼비처럼 추악하다는 사실에도 불구하고, 나는 응답 텍스트를 변수에 사용하고 있습니다. 마지막으로 가장 최근의 주석을 분리하고 그 위치로 밀어 넣습니다.

그러나 IE는 새 주석을 포함하지 않는 캐시 된 버전의 페이지를 반환합니다. 그래서 ".commentlist li : last"는 이전의 주석을 선택합니다. 그 복제본은 쓸모없이 원본 아래로 미끄러 져 내려갑니다.

ajaxSubmit 옵션에서 "cache : false"설정을 시도했지만 아무런 효과가 없습니다. url 옵션을 설정하고 난수 또는 타임 스탬프를 붙이려고 시도했지만 응답을 반환하는 GET보다는 서버에 주석을 제출하는 POST에 첨부되는 바람에 아무런 효과가 없습니다. 나는 그 밖에 무엇을 시도해야할지 모르겠습니다. 브라우저 캐싱을 끄면 IE에서 모든 것이 잘 작동하지만 분명히 페이지를 보는 사용자가 기대할 수있는 것은 아닙니다.

도움을 주시면 대단히 감사하겠습니다. 미리 감사드립니다!

진행 보고서로 편집 : 두 사람이 캐싱을 방지하기 위해 PHP 헤더를 사용하도록 제안했으며 이는 실제로 작동합니다. 문제는 wp-comments-post가 새로운 코멘트가 제출되었을 때 전체 페이지를 다시 뱉어 버리는 것이고, 헤더를 추가하는 유일한 방법은 Wordpress 포스트 템플릿에 넣는 것입니다. 모든 템플리트에서 캐싱을 전혀 사용할 수 없게 만듭니다 시간 - 내가 바라는 행동이 아닙니다.

"if_ajax"또는 그와 유사한 PHP 조건을 설정하는 방법이 있습니까? 정규 페이지로드 중에 헤더가 적용되지 않도록하고, 페이지가 Ajax GET에 의해 호출 된 경우 플러그 인합니다 ?

답변

1

내가 이렇게 된 방법은 랜드 = 새로운 날짜()를 추가하는 것입니다.이 기능은 위의 URL의 주소로 랜드 = 시간을 추가합니다

if(url.replace("?") != url) 
    url = url+"&rand="+new Date().getTime(); 
else 
    url = url+"?rand="+new Date().getTime(); 

끝에 다음 getTime() [주소는 .php로] get 매개 변수를 제공하면 & rand = time ...이 추가됩니다. 그렇지 않으면? rand = time이 추가됩니다. 브라우저는 캐싱을 유지하지만 페이지는 겹치지 않습니다.

또한 캐시 제어를 설정하여 캐싱을 해제하는 PHP의 헤더()를 사용할 수 있습니다 및 만료 :

+0

문제는 ajaxSubmit 보인다 내에서 아무것도 나는 URL을 옵션에 추가 할 것입니다 서버에 설명을 보내는 초기 POST에만 적용하고 응답을 반환하는 GET에는 적용하지 않습니다. 그래서 나는 "wp-comments-post.php & rand = [숫자 묶음]"이라는 POST를 보았습니다.하지만 GET은 단순히 rand 문자열이없는 페이지의 URL입니다. 그리고 이것이 바로 IE가 잘못된 데이터를 얻는 곳입니다. 내가 어떻게 그 문자열을 추가 할 수 있습니까? 나는 그것과 전혀 상호 작용하는 방법을 이해할 수 없다. – Harfleur

+0

Follow-up : PHP 헤더()를 사용하여 캐시 제어를 no-cache로 설정하려고 시도했지만 매력과 같이 작동했습니다. 그래서 진전이 있습니다! 문제는 모든 Wordpress 포스트에서 모든 경우 캐싱을 방지한다는 것입니다. 그래도 올바른 방향으로 나아가 야합니다. – Harfleur

+0

.php에 대한 캐시를 갖고 싶지 않은 헤더 만 넣어야합니다. 그렇지 않으면 브라우저에 "yes, do cache for me"헤더를 보내야합니다. – Warty

0

당신의 PHP의 시작이 넣어 :이 도움이 될

header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 

. 그렇지 않은 경우 - 헤더가있는 파일 이름으로 임의의 숫자를 넣으십시오.

게시물이 가져 오기 요청으로 리디렉션됩니다. 캐시해야하는지 여부를 제어하려면 가져 오기 페이지에 정보를 보내야합니다.

+0

헤더 기능은 훌륭하게 작동하지만 wp-comments-post는 전체 페이지를 반환합니다. 따라서 PHP를 시작할 때 캐시 무시 헤더를 추가하면 모든 게시물을 캐싱하지 못하게하는 Wordpress 게시물 템플리트에 추가된다는 것을 의미합니다. 분명히 큰 변화는 아닙니다. "페이지가 wp-comments-post에 의해 반환되는 경우에만"대상을 지정하는 방법이 있습니까? – Harfleur

+0

나는 wordpress를 모르지만 헤더를 출력 할 때 사용 가능한 HTTP 정보를 조사해야한다. AJAX POST 호출 후 호출이 클라이언트 브라우저에 의해 트리거되는 대신 추적되는 경우 추적 가능해야합니다. – naugtur

2

jQuery.ajaxSubmit는() 표준 jQuery.ajax()의 옵션을합니다. 캐싱을 해제 거짓 옵션 : 당신은 따라서 표준 캐시를 사용할 수 있습니다

jQuery(this).ajaxSubmit({ 
    cache: false, 
    success: 
     function(data) { 
      var response = $("<ol>"+data+"</ol>"); 
      response.find('.commentlist li:last').hide().appendTo(jQuery('.commentlist')).slideDown('slow'); 
     }   
    }); 
0

이 방지 할 수 캐싱은 전 세계적으로 그와

$(document).ready(function() { 
    $.ajaxSetup({ cache: false }); 
});