2014-11-06 54 views
0

Working on classifieds website project and using and open source framework「osclass」,我試圖用AJAX api調用加載每個類別的計數,但有時它不會返回準確的結果PHP ajax API有些時候會返回錯誤的結果

例子: 總有效的車數據庫:71 但API刷新鉻緩存後返回68

我得到確切的數字:

這裏是我的簡單的API代碼:

$result = $con->query("SELECT pk_i_id FROM oc_t_item where pk_i_id in (select fk_i_item_id from oc_t_item_location where fk_i_region_id=$id) and fk_i_category_id=$cat and dt_expiration >= now() and b_enabled=1 and b_active=1") or die(mysql_error()); 
     $count= mysqli_num_rows($result); 
     $array = mysqli_fetch_row($result); 
     } 
     else{ 
     $result = $con->query("SELECT pk_i_id FROM oc_t_item where fk_i_category_id=$cat and dt_expiration >= now() and b_enabled=1 and b_active=1") or die(mysql_error()); 
     $count= mysqli_num_rows($result);enter code here 
     $array = mysqli_fetch_row($result); 
     } 
echo json_encode($count); 

我認爲它的緩存相關的問題,但我不知道如何處理該問題,將不勝感激!

+0

就在擡起頭。看起來您正在使用GET請求更新應用程序的數據庫/狀態。這就是問題出現的原因。有一個閱讀:http://stackoverflow.com/questions/4573305/rest-api-why-use-put-delete-post-get – 2014-11-06 08:44:21

+0

謝謝你的回覆,我讀過這篇文章,但在我的情況下..我沒有使用任何API來更新數據庫中的狀態,僅使用它來讀取數據庫中的類別統計信息 – 2014-11-06 10:45:34

+0

我在說一般情況。瀏覽器返回相同結果的唯一原因是因爲它被緩存(就像你自己所說的那樣)。如果在兩個GET請求之間沒有POST/PUT/DELETE,則服務器是SUPPOSE以返回相同的答案。 – 2014-11-06 10:47:33

回答

2

當向服務器調用ajax請求時,通過隨機或恰好時間生成任意唯一的密鑰。

例如

url = 'getData.php?unique=' + Math.random(); 
+0

你能不能詳細說明一下,爲什麼要把唯一的隨機數放在請求參數中? – 2014-11-06 10:41:04

+0

瀏覽器商店緩存類似網址的一些結果。如果您向瀏覽器發出一些請求,可以使用緩存中的值並且不向服務器發出真正的請求。當你添加唯一的參數時,你告訴瀏覽器向每個呼叫的服務器發出請求。 – newman 2014-11-06 10:55:19

+0

偉大的人,它的工作! 豎起大拇指 – 2014-11-06 12:06:47

0

就像我在它看起來像兩個GET請求之間的應用程序的狀態更改的註釋說明。這是不會發生的:REST API - why use PUT DELETE POST GET?

你總是提出某種請求到服務器,萬一網站是GET和有時POST(當你通過表單發送數據時)。

@紐曼answser是一個很好的。您必須提出不同的請求,以便服務器/瀏覽器不會爲該URL返回預先計算好的值和緩存值,但實際上會避免請求。

您還可以使用時間戳(在以毫秒爲單位的JavaScript),這是保證返回總是唯一的號碼:

url = 'getData.php?unique=' + new Date().getTime();