AJAX成功返回旧结果

时间:2012-07-19 14:35:09

标签: javascript jquery ajax

我使用AJAX将sendint序列化数据发送到items.php文件,我正在使用FireBug检查结果,AJAX发送这样的数据category=2我的items.php文件是:

<?php
require_once('db.php');
if (isset ($_POST['category'])) {
$kat = mysql_real_escape_string($_POST['category']);
if ($kat == 0){
 $kat = '';
}elseif ($kat == 1){
 $kat = 'ORDER BY date DESC';
}elseif ($kat == 2) {
    $kat = 'ORDER BY price DESC';
}elseif ($kat == 3) {
    $kat = 'ORDER BY price';
}
}else{ $kat = '';}
        $query = "SELECT * FROM prekes ".$kat."";
        mysql_query("SET NAMES 'UTF8'");
        $q = mysql_query($query) or die(mysql_error());
        $i = 0;
        while($f = mysql_fetch_array($q)){

        echo '<div kaina="'.$f['kaina'].'" class="prekes"><img src="prekes/'.$f['foto'].'">'.$f['pavadinimas'].'<br /><strong>'.$f['kaina'].'Lt </strong></div>';
        }
        ?>

这是我的AJAX成功函数:

   $.ajax({
        type: 'POST',
        url: 'items.php',
        data: cleaned,
        success: function () {          
                              $('#items').fadeOut("fast").load("items.php?ts="+ $.now()).fadeIn("fast");
    }
   }); 

Div成功后刷新,但我变老了,结果无序。为什么会这样?

4 个答案:

答案 0 :(得分:3)

由于load方法在内部使用jQuery get方法,我猜您正在获取缓存数据。确保将唯一键作为查询字符串的一部分发送,它将为您提供新的内容/结果/未缓存数据。您可以使用Date对象来创建一个新的唯一字符串;

$('#items').fadeOut("fast").load("items.php?ts="+new Date().getTime())

编辑: jQuery有一个名为$.now()的小方法,可以为您提供唯一的时间戳。您可以使用它而不是编写Date()。getTime()方法。

$('#items').fadeOut("fast").load("items.php?ts="+ $.now())
  

$ .now()方法是由...返回的数字的简写   表达式(新日期).getTime()。

感谢Kevin指出。 :)

编辑2 :看到代码后

1)您没有传递用于返回有序列表的category查询字符串值。您应该像这样传递

$('#items').fadeOut("fast").load("items.php?category=2&ts="+ $.now())

2) load方法是GET请求。在您的PHP代码(items.php)中,您使用$ _POST访问它(这是正确的吗?不应该是$_GET

所以改变

$kat = mysql_real_escape_string($_POST['category']);

$kat = mysql_real_escape_string($_GET['category']);

答案 1 :(得分:3)

为了防止缓存任何ajax调用,我通常会设置全局函数。

(这与函数无关,即post / get / etc)

    $.ajaxSetup({
         cache: false
    }); 

答案 2 :(得分:1)

问题是.load('items.php')它使用GET请求,并且设计GET请求被缓存在浏览器中,因此它不必继续查找内容。在服务器上设置正确的标头,以便不缓存页面。

<?php
  header("Cache-Control: no-cache, must-revalidate"); 
  header("Pragma: no-cache");
  header("Expires: Sat, 26 Jul 1997 00:00:00 GMT"); 
?>

答案 3 :(得分:0)

添加标头不缓存

标题:{                 'Cache-Control':'no-cache'             }