这是我第三次编辑这篇文章,经过更多的测试和调试之后,我一直在寻找新的东西。这是我的情况:

我有一个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');

似乎可以解决问题。

07-26 04:52