1

我正在使用 AJAX 将序列化数据发送到 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

4 回答 4

4

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

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

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

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

$.now() 方法是表达式 (new Date).getTime() 返回的数字的简写。

感谢凯文指出。:)

编辑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']);
于 2012-07-19T14:38:47.107 回答
3

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

(这是功能独立的,即 post/get/etc)

    $.ajaxSetup({
         cache: false
    }); 
于 2012-07-19T14:48:52.627 回答
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"); 
?>
于 2012-07-19T14:38:40.120 回答
0

添加标头无缓存

标头:{“缓存控制”:“无缓存”}

于 2019-12-03T13:55:54.360 回答