Я использую Cakephp (в режиме разработки), а мой источник данных - это база данных/Mysql.Запись добавляется в БД с задержкой
В моей системе я имею следующий процесс:
- посетителей выбрать 6 пунктов
- посетителей нажимает на кнопку
- По щелчку баттона я использую JQuery $ .post для отправки данных в PHP которая берет эти данные и добавляет их в базу данных.
- После этого (или, может быть, не так, как кажется), их посетитель перенаправляется на страницу оплаты.
Это сценарий jquery, который отвечает за отправку данных в функцию «дескриптор» php.
$('.next-step').on('click', function(){
var paymentPage = $(this).attr('data-href');
var slotsData = [];
var i = 0;
$('.slot').each(function(){
slotsData[i] = {
'img-id': $(this).attr('data-id'),
'img-src': $(this).attr('data-src'),
'img-high-src': $(this).attr('data-high-src'),
'img-page': $(this).attr('data-page')
};
i++;
});
var setid = 0;
$.post('/sets/handle', {k:'',setid:setid,setData:slotsData}, function(data){
window.location = paymentPage;
});
return true;
});
Это ручка функция PHP
public function handle()
{
$this->autoRender = false;
$this->request->onlyAllow('ajax');
$set_id = (int)$this->request->data('setid');
$images = serialize($this->request->data('setData'));
//Key
$cookie_key = $this->Cookie->read('visitor_key');
if(isset($cookie_key) && $cookie_key != null)
{
$key = $cookie_key;
}
else
{
$key = $this->newKey();
$this->Cookie->write('visitor_key', $key);
}
//Edit Mode
if(isset($set_id) && $set_id > 0)
{
/*Some other irrelevant code */
}
else //Creating a new set
{
$this->Set->create();
$this->Set->save(array(
'images' => $images,
'visitor_key' => $key,
'quantity' => 1
));
AppController::logActivity(array('visitor_key' => $key, 'instagram_id' => 0, 'instagram_username' => ''), 'Created New Set', $this->Set->id);
return json_encode(array('status' => 'created','setid' => $this->Set->id,'visitor_key'=>$key));
}
}
Это функция PHP оплаты
public function payment() {
$this->set('title_for_layout', 'Review Your Order');
/*
debug(date("d-m-y H:i:s"));
*/
$sets = $this->Set->findAllByVisitorKeyAndOrderId($this->Cookie->read('visitor_key'),'0');
/*
debug($sets);
*/
$onesetcost = Configure::read('Ecom.setcost');
$visitor_key = $this->Cookie->read('visitor_key');
$total_sets = 0;
foreach($sets as $set){
$total_sets += $set['Set']['quantity'];
}
$shippmentCost = $this->shippmentCostByQuantity($total_sets);
$this->set(compact('sets','onesetcost','visitor_key','shippmentCost'));
}
Так что проблема есть после того, как попасть на страницу оплаты, переменная «sets» не содержит новые данные, которые недавно были добавлены.
Чтобы найти проблему, я сравнил время создания записи (у меня есть «созданное» поле в таблице наборов) до момента загрузки страницы оплаты. (См. Комментарии команд).
Кажется, что записи добавляются примерно через 30 секунд после отображения страницы оплаты. Как это возможно?
Я имею в виду, что перенаправление обрабатывается после добавления записи в БД. Я думал, что это кэш, но я все еще использую кеш-файл по умолчанию, который, похоже, не кэширует записи, а только схему db.
Я искал любую связанную с этим проблему, но ничего не закончил, Я отлаживал и пытался практически любую идею, которую я имел, но все же я не нашел источник проблемы.
Спасибо.
Я был уверен, что '' .done' и .success' в основном то же самое. Я попробую и обновить вас. Благодарю. –