2014-11-06 2 views
0

Работает на веб-сайте проекта и использует фреймворк с открытым исходным кодом «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

Just головы вверх. Похоже, вы обновляете базу данных/статус приложения с помощью запросов GET. Вот почему проблема возникает. Прочитайте: http://stackoverflow.com/questions/4573305/rest-api-why-use-put-delete-post-get –

+0

спасибо за ответ, я прочитал этот пост, но в моем случае ..i не сделал использовать любой API для обновления статуса в базе данных, используя его только для чтения статистики категорий из базы данных –

+0

Я говорю в целом. Единственная причина, по которой браузер возвращает тот же результат, состоит в том, что он кэшируется (как вы сказали сами). Если нет POST/PUT/DELETE между двумя запросами GET, сервер SUPPOSE возвращает тот же ответ. –

ответ

2

При вызове ajax-запроса на сервер добавьте к параметрам любой уникальный ключ, созданный случайным или простым временем.

Например

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

Не могли бы вы немного разобраться в этом, зачем ставить уникальное случайное число в параметры запроса? –

+0

Браузер хранит в кеше некоторые результаты для аналогичного URL. Если вы сделаете запрос на один URL-адрес в браузере, вы можете использовать значение из кеша и не выполнять реальный запрос на сервер. Когда вы добавляете уникальные параметры, вы указываете браузеру запрос на сервер для каждого вызова. – newman

+0

отличный человек, это сработало! Thumbs up –

0

Так же, как я объяснил в комментариях это выглядит как состояние приложения изменится между двумя запросами GET. Это не должно произойти: REST API - why use PUT DELETE POST GET?

Вы всегда делаете своего рода запрос на сервер, в случае веб-сайтов он GET и иногда POST (при отправке данных через формы).

@ newman answser является хорошим. Вы должны сделать другой запрос, чтобы сервер/браузер не возвращал уже предварительно вычисленное и кэшированное значение для этого URL-адреса, но фактически выполняет запрос.

Вы также можете использовать метку времени (в JavaScript в миллисекундах), которое гарантированно возвращает всегда уникальный номер:

url = 'getData.php?unique=' + new Date().getTime(); 
Смежные вопросы