【问题标题】:Multiple simultaneous running ajax requests in ExtJS 4ExtJS 4 中多个同时运行的 ajax 请求
【发布时间】:2011-10-26 19:43:04
【问题描述】:

问题

我有一个长期运行的导入作业,我从一个 ajax 请求开始,可能需要几分钟才能完成请求。当第一个 ajax 请求正在运行时,我想查看服务器以了解导入的进度,第二个请求将每 2 秒左右完成一次。

当我使用 Ext.Ajax 方法时,请求似乎被链接了 - 第一个 ajax 请求(导入)运行直到完成,然后第二个(导入更新)被触发。

我看到 Ext.Ajax 是单例的,所以也许这就是原因。所以我尝试使用Ext.create('Ext.data.Connection') 创建我自己的 Connection 对象,但它不起作用。

我的当前请求链是:

  • 第一个请求 - 开始
  • 第一个请求 - 结束
  • 第二个请求 - 开始
  • 第二个请求 - 结束

但它应该是:

  • 第一个请求 - 开始
  • 第二个请求 - 开始
  • 第二个请求 - 结束
  • ...也许更多的第二个请求
  • 第一个请求 - 结束

问题

浏览器应该可以处理多个请求,ExtJS里面肯定有限制但是我没发现?


2011 年 10 月 16 日更新

回答

问题不在于 ExtJS - 抱歉!它是 PHP,我的第一个脚本与会话一起使用,第二个脚本也尝试访问会话。而且由于 PHP 会话是基于文件的,会话文件被第一个请求脚本锁定,第二个请求脚本必须等到第一次释放会话锁定。

我在每 x 行之后添加到导入过程(第一个脚本)中的这段小代码解决了这个问题:

 $id = session_id();
 session_write_close();
 sleep(1);
 session_start($id);

因此它停止并重新加载会话,并且其他脚本能够挂接并获取会话信息。

【问题讨论】:

  • +1 获取信息。永远不知道会话锁定的事情:)
  • 这太棒了。我遇到了完全相同的问题,但我没有意识到这是会话锁定搞砸了。

标签: php extjs4


【解决方案1】:

单例或非单例甚至不会改变Ext.Ajax 的工作方式。我认为这可能是由于编码(您是否等待调用完成?)

Afaik,我以前打多个电话时从来没有遇到过这个问题。唯一占用调用的是服务器(PHP),它不支持并行处理并导致延迟,并生成这样的模式

  • 呼叫 1 - 开始
  • 呼叫 2 - 开始
  • 呼叫 1 在服务器中得到处理,呼叫 2 排队
  • 呼叫 1 - 完成
  • 调用 2 在服务器中得到处理
  • 通话 2 - 完成

如果呼叫 1 需要比呼叫 2 更多的时间来处理,这可能是灾难性的。

编辑:

我写了this little demo 只是为了让你感受一下它是如何工作的。看看 :) 花了我半个小时哈哈!

【讨论】:

  • 编辑:添加了一个漂亮的小图表 :)
  • 哇!非常感谢队友!伟大的工作,这太棒了!你是对的 - 这是服务器端,我遇到了 PHP 问题(会话锁定),我没有看到,我会用答案更新我的问题。顺便说一句,我不知道很酷的 jsfiddle 东西,从现在开始我会使用它!
  • 欢迎您!只需将其散布在堆栈中即可。这对于编码人员来说更容易分享问题和答案。
  • 谢谢。刚刚有一些额外的时间来做一些小的编码:)
  • 你传播了 jsfiddle,我已经用过了 :) stackoverflow.com/questions/7912596/async-call-in-jquery/…
猜你喜欢
  • 2011-11-28
  • 2012-12-12
  • 2017-03-04
  • 1970-01-01
  • 2013-03-19
  • 2015-10-30
  • 2014-10-11
相关资源
最近更新 更多