CakePHP无法一次处理两个Ajax请求?

时间:2011-05-21 10:33:51

标签: javascript ajax cakephp

这是我第三次编辑这篇文章,在经过更多测试和调试之后,我不断发现新内容。在这里我的情况:

我有一个方法thinker需要一段时间来处理。因此,我决定通过Ajax调用它,并向用户显示一个指示器。到目前为止 - 效果很好。

我正在尝试做的另一件事实际上是向用户展示“思考”的进度,百分比或只是滴答,无论如何。

这并不困难,因为thinker有一个循环,并且在每次迭代中都会将新的thoughts保存到数据库中。

基本上 - counter只显示“想法”的数量(与特定ID相关联)。

问题是,不会调用回调选项。

嗯 - 划伤 - 它确实被调用,但只有两次。在请求(显示为零)之前和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之后响应1}}完成了思考。

在第一个请求完成之前,Cake是否可能无法处理第二个请求?

此致 保罗

2 个答案:

答案 0 :(得分:2)

嗯,事实证明,问题实际上是Cake。默认情况下,CakePHP将会话存储在文件中(实际默认为php.ini)。它归结为:

一个用户无法使用默认会话存储选项同时运行两个CakePHP实例。

更改:

Configure::write('Session.save', 'php');

Configure::write('Session.save', 'cache');

似乎可以做到这一点。

答案 1 :(得分:0)

我不认为蛋糕是罪魁祸首。它最终可能是你的服务器,但这不太可能。但是,您的脚本可能会锁定数据库,从而阻止再次读取它。这对我来说似乎更有可能。我不是那里的专家,所以我只是在这里猜测,但我会考虑持久连接,并强制关闭/打开每个循环之间的连接。还有一件事要检查交易,但同样,我从未遇到过这种麻烦。

无论如何,我会尝试单独排除每个组件进行调查。