나처럼 많은 잃어버린 영혼들처럼, 나는 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에 의해 호출 된 경우 플러그 인합니다 ?
문제는 ajaxSubmit 보인다 내에서 아무것도 나는 URL을 옵션에 추가 할 것입니다 서버에 설명을 보내는 초기 POST에만 적용하고 응답을 반환하는 GET에는 적용하지 않습니다. 그래서 나는 "wp-comments-post.php & rand = [숫자 묶음]"이라는 POST를 보았습니다.하지만 GET은 단순히 rand 문자열이없는 페이지의 URL입니다. 그리고 이것이 바로 IE가 잘못된 데이터를 얻는 곳입니다. 내가 어떻게 그 문자열을 추가 할 수 있습니까? 나는 그것과 전혀 상호 작용하는 방법을 이해할 수 없다. – Harfleur
Follow-up : PHP 헤더()를 사용하여 캐시 제어를 no-cache로 설정하려고 시도했지만 매력과 같이 작동했습니다. 그래서 진전이 있습니다! 문제는 모든 Wordpress 포스트에서 모든 경우 캐싱을 방지한다는 것입니다. 그래도 올바른 방향으로 나아가 야합니다. – Harfleur
.php에 대한 캐시를 갖고 싶지 않은 헤더 만 넣어야합니다. 그렇지 않으면 브라우저에 "yes, do cache for me"헤더를 보내야합니다. – Warty