基本上它会像这样崩溃:
问题:
上周这令我难以置信。我已经删除了除回调本身之外的所有其他不相关的东西,它仍然显示相同的行为。令人沮丧。
代码很简单,看起来像这样:
在onclick调用后返回的布局页面。
<?php echo $content_for_layout ?>
<script>
$(window).ready(function() {
page_load_callback();
});
</script>
javascript。
function page_load_callback() {
$.ajaxSetup({
cache: true // We want our client to cache stuff, and override this in PHP.
});
$.ajax({
cache: false, // Force this to not cache via jQuery
beforeSend: function() {
$('body').prepend('<div id="flash_message_popup"></div>');
},
url: flash_message_popup_link, // global variable set in default.ctp
success: function(data) {
$('#flash_message_popup').html(data);
if ($('#flash_message_popup').is(':empty')) {
$('#flash_message_popup').remove();
} else {
create_popup('flash_message_popup');
}
},
error: function(a, b, c) {
$('#flash_message_popup').remove();
}
});
}
function create_popup(tag) {
if (editing_hall == true) {
return false;
}
var selector = '#' + tag;
$(selector).attr('style', 'position: absolute; display: none; top: 5; left: 5; z-index: 100;');
$(selector).slideDown('slow');
}
* .ctp文件。
<?php if ($message = $session->flash()): ?>
<span id="flash_data">
<div class="flash_message"><?php echo $message; ?></div>
<div class="btn_large bottom_round"><a name="" onclick="$('#flash_message_popup').slideUp('slow', function() { $('#flash_message_popup').remove(); });">close</a></div>
</span>
<?php endif; ?>
控制器方法。
function flash_message_popup() {
$expires = 60*60*24*30*7;
header('Expires: '.gmdate('D, d M Y H:i:s', time()-$expires) . ' JST'); // minus for past
$this->layout = 'ajax';
$this->render('../elements/flash_message_popup');
}
会话存储在数据库中,直到此特定实例才被证明是一个问题。我不确定这是否是一个浏览器缓存问题(我不应该?我特别没有通过PHP和jQuery进行缓存),一个古怪的会话问题,一个计时问题,一些在我的javascript中乱七八糟的东西,或者是什么。我尝试添加一个冗余回调,用$ this-&gt; Session-&gt; delete('Messages.flash')删除有问题的会话。也没有运气。
如果有人有任何建议,我很乐意听到。我没有想法。
编辑:我还检查了Apache日志,并且回调肯定会被ajax查询调用,但不会删除会话消息。只有在我手动调用它之后才会删除它。
答案 0 :(得分:0)
我认为正在发生的事情是,在PHP重置之前,AJAX正在使用Session flash。通常,它是在CRUD方法成功或失败时设置的,例如,
if ($this->Invoice->save($this->data)) {
$this->Session->setFlash(__('The Invoice has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The Invoice could not be saved. Please, try again.', true));
}
因为您正在执行AJAX操作,所以在显示Flash消息之前可能无法访问该代码。在这种情况下,我会在输入方法时重置它,或者在显示它之后使用AJAX调用重置它。
答案 1 :(得分:0)
问题似乎是太多的AJAX请求与数据库会话冲突,所以时间完全关闭,数据库数据似乎被旧的会话数据覆盖。我将把它留在那并关闭这个问题。