我使用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成功后刷新,但我变老了,结果无序。为什么会这样?
答案 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' }