GET Ajax方法的问题

时间:2016-05-15 06:38:24

标签: php jquery ajax

前段时间我开始使用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.phpfooter.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工具时,一切正常。

哦,控制台上有很多错误,我不知道它们的含义。

错误图片:

Duplicated content

帮助:(

2 个答案:

答案 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#内容中,而是必须将其粘贴到整个页面上。试一试。