我使用Cakephp(在开发模式下),我的数据源是database / Mysql。
在我的系统中,我有以下过程:
这是jquery脚本,负责将数据发送到php函数" handle"。
$('.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'));
}
所以问题是在进入付款页面后,"设置"变量不包含最近添加的新数据。
为了找到问题,我将记录的创建时间(我在集合表中创建了"创建的"字段)与付款页面加载的时间进行了比较。 (参见注释命令)。
似乎在显示付款页面后30秒内添加了记录。 怎么可能?
我的意思是,在将记录添加到数据库之后正在处理重定向。 我认为它是缓存,但我仍然使用默认的文件引擎缓存,它似乎不缓存记录而只缓存数据库方案。
我一直在寻找任何相关问题,但一无所获, 我调试并尝试了几乎所有的想法,但我仍然没有找到问题的根源。
感谢。
答案 0 :(得分:0)
将您的window.location = paymentPage;
代码包含在成功处理程序中。
例如:
$.post('/sets/handle', {k:'',setid:setid,setData:slotsData}, function(data){
// Do nothing in here
}).done(function( msg ) {
window.location = paymentPage;
});
正在发生的事情是,在请求发生的同时,用户被重定向到新页面。如果你等到请求完成,那么你应该没问题。
有关jquery ajax请求的更多信息,请点击此处: http://api.jquery.com/jquery.ajax/