前段时间我开始使用ajax,但是我遇到了一个奇怪的问题,我不知道原因。
我使用3个文件来制作我的所有页面:页眉,页脚和内容文件。在标题中我把我的ajax代码放在这样的代码:
$(document).on("click", '.ajax a', function (e) {
e.preventDefault();
var href = $(this).attr("href");
if (href == location.pathname) return; // Prevent from refresh on click the current page link
loadContent(href); // Make the AJAX call
window.history.pushState('', '', href); // Changes the link
});
//MAKE BACK/FORWARD WORKS
window.onpopstate = function(event) {
loadContent(location.pathname);
};
///////////////////////////////////////AJAX ITSELF
function loadContent(url){
$.ajax({
url:url,
type:'GET',
error: function(){
alert("Oops, something went wrong :(");
},
success:
function(data){
$('#content').html(data); // Inject page into the content div
document.title = $("#titulosads").val(); // Changes the page title
}
});
}
之后,我打开将在页脚中关闭的#content
div
。
在每个页面文件中,我使用这些代码包含header.php
和footer.php
时间:
function includeheader($pagename, $pagedescription)
{
$title = $pagename;
$description = $pagedescription;
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
echo "<input type='hidden' id='titulosads' value='".$title."' />";
} else {
include 'header.php';
}
}
对于页脚:
function includefooter()
{
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
} else {
include 'footer.php';
}
}
所以,基本上,这是我的网页:
<?php
include_once 'includes/checkajax.php';
includeheader('Contact');
?>
Content of the page here!
<?php
includefooter();
?>
嗯,这是我的问题:当我使用AJAX的GET方法时会有点奇怪。
当您点击其他链接并返回第一个链接时,事情会重复。您可以在http://feely.com.br
上查看当我将方法更改为POST或激活禁用缓存的chrome dev工具时,一切正常。
哦,控制台上有很多错误,我不知道它们的含义。
错误图片:
帮助:(
答案 0 :(得分:2)
好吧,如果你自己已经发现这是一个缓存问题,那么请遵循以下提示:
要么注意您将请求标记为不通过您添加的http标头进行浏览器缓存,要么使用唯一的URL来处理请求,这通常只需将基于微时间的请求参数添加到URL。然而,首选方法是使用http标头告诉浏览器如何处理响应有效负载。这就是http标题的用途......
PHP为此提供header()
函数:
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
答案 1 :(得分:0)
我认为你在一个类似页面的一部分中加载了整个页面内容。因此,您不必将内容粘贴到div#内容中,而是必须将其粘贴到整个页面上。试一试。