这是我第三次编辑这篇文章,经过更多的测试和调试之后,我一直在寻找新的东西。这是我的情况:
我有一个thinker
方法,需要一段时间才能处理。因此,我决定通过Ajax调用它,并向用户显示一个指标。到那时为止-效果很好。
我要尝试做的另一件事,实际上是向用户显示“思考”的进度,以百分比或滴答作答。
这并不难,因为thinker
有一个循环,并且在每次迭代中都将新的thoughts
保存到数据库中。
因此,基本上-counter
仅显示“想法”的数量(与特定ID绑定(bind))。
问题是,没有调用回调选项。
嗯-从头开始-它确实被调用了,但是只有两次。在请求之前(显示为零)和thinker
完成思考之后,何时不再使用它(显示全部金额)。
这是简化的代码:
<span id="indicator" style="display: none;"><img src="/img/ajax-loader.gif" alt="" /></span>
<span id="progress"></span>
<span id="clicker" style="cursor: pointer;">Do it!</span>
<script type="text/javascript">
//<![CDATA[
Event.observe('clicker', 'click', function(event) {
new Ajax.Request(
'/examples/thinker/123',
{asynchronous:true, evalScripts:true, onComplete:function(request, json) {Element.hide('indicator');}, onLoading:function(request) {Element.show('indicator');}}
);
new Ajax.PeriodicalUpdater(
'progress',
'/examples/counter/123',
{asynchronous:true, evalScripts:true, frequency: 2}
);
});
//]]>
</script>
编辑:
通过使用Firebug XHR控制台,我设法更深入地了解了这一点。我实际上使用了jQuery(只是进行测试,但这没有帮助)。
我猜是问题出在CakePHP上。 我的意思是-当我用基本的PHP创建相同的场景时,它可以同时工作。当我使用Cake进行操作时,
counter
将被调用,然后thinker
将被调用,并且counter
将每两秒被调用一次,但是仅在thinker
完成思考后才会响应。Cake在第一个请求完成之前是否无法处理第二个请求?
问候,
保罗
最佳答案
好吧,事实证明,问题出在蛋糕上。默认情况下,CakePHP将 session 存储在文件中(实际上是php.ini
的默认值)。可以归结为:
使用默认的 session 存储选项,一个用户不能同时运行两个CakePHP实例。
变更:
Configure::write('Session.save', 'php');
至
Configure::write('Session.save', 'cache');
似乎可以解决问题。