2012-07-19 88 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 
    });