Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CakePHP赢得';您是否无法同时处理两个Ajax请求?_Javascript_Ajax_Cakephp - Fatal编程技术网

Javascript CakePHP赢得';您是否无法同时处理两个Ajax请求?

Javascript CakePHP赢得';您是否无法同时处理两个Ajax请求?,javascript,ajax,cakephp,Javascript,Ajax,Cakephp,这是我第三次编辑这篇文章,经过更多的测试和调试,我不断发现新的东西。以下是我的情况: 我有一个方法thinker,需要一段时间来处理。因此,我决定通过Ajax调用它,并向用户显示一个指示器。在这一点上——效果很好 我想做的另一件事是,向用户展示“思考”的进度,以百分比或刻度表示,随便什么 这并不难做到,因为thinker有一个循环,在每次迭代中,它都会将新的thinks保存到数据库中 所以基本上,计数器只显示“想法”的数量(与特定id相关) 问题是,不会调用回调选项 好吧,请注意,它确实会被调用

这是我第三次编辑这篇文章,经过更多的测试和调试,我不断发现新的东西。以下是我的情况:

我有一个方法
thinker
,需要一段时间来处理。因此,我决定通过Ajax调用它,并向用户显示一个指示器。在这一点上——效果很好

我想做的另一件事是,向用户展示“思考”的进度,以百分比或刻度表示,随便什么

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

所以基本上,
计数器
只显示“想法”的数量(与特定id相关)

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

好吧,请注意,它确实会被调用,但只有两次。在请求之前(显示为零)和
思考者完成思考之后,当它不再有用时(显示全部金额)

以下是简化代码:

<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是否可能无法处理第二个请求

问候,,
保罗

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


无论如何,我会尝试分别排除每种成分进行调查。

事实证明,问题实际上在于蛋糕。默认情况下,CakePHP将会话存储在文件中(默认为
php.ini
中)。这可以归结为:

使用默认会话存储选项,一个用户不能同时运行两个CakePHP实例

更改:

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

看起来很有意思

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