2014-11-06 55 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();