2012-07-19 90 views
1

我sendint串行数据items.php与AJAX文件,我检查与萤火虫结果,AJAX发送这样category=2我items.php文件中的数据是:AJAX成功返回老的结果

<?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刷新成功后,但我变老,无序的结果。为什么会发生?

+1

您可能不想用HTML进行响应。尝试使用'json_encode()'。 – Amberlamps 2012-07-19 14:37:00

回答

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()) 

的$。现在()方法是用于通过 表达式(新日期)返回的数的简写.getTime()。

谢谢Kevin指出。 :)

编辑2:看到代码

1)你不及格正在使用返回有序list.You的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']); 
+0

另外值得注意的是,jQuery为此提供了一个辅助方法。 '“items.php?ts =”+ $ .now())' – 2012-07-19 14:44:13

+0

@Shyju我仍然收到旧的数据。在检查firebug时,post方法会得到相应的数据,但是当我打开get line(post line后面)时会出现旧的无序数据。 – 2012-07-19 14:45:24

+0

@KevinB谢谢。从来不知道它。我将它添加到答案中并提到你。 – Shyju 2012-07-19 14:48:43

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

为了防止任何AJAX来自缓存的呼叫我通常有一个全局功能设置

(这是函数独立的,即post/get/etc)

$.ajaxSetup({ 
     cache: false 
    });