当服务器上的 ajax 调用花费太多时间时,我的应用程序出现问题:它将用户的所有其他查询排队,直到它完成服务器端(我意识到取消调用客户端没有效果,用户仍然必须等待)。
这是我的测试用例:
<script type="text/javascript" src="jquery-1.4.1.min.js"></script>
<a href="another-page.php">Go to another page on the same server</a>
<script type="text/javascript">
url = 'http://localserver/some-very-long-complex-query';
$.get(url);
</script>
因此,当 get 被触发,然后在我单击链接后,服务器完成第一次调用,然后将我带到另一个页面。我的问题是我想避免这种行为。
我在 LAMP 服务器上,我正在寻找一种方法来通知服务器用户使用 connection_aborted() 等函数中止了查询,你认为这是要走的路吗?另外,我知道这个 PHP 脚本最长的部分是 MySQL 查询,所以即使我知道 connection_aborted() 可以检测到用户取消呼叫,我仍然需要在 MySQL 查询期间检查这一点......我'我不太确定 PHP 是否可以处理这种“事件”。
因此,如果您有更好的想法,我迫不及待地想听听。
谢谢你。
更新: 经过进一步调查,我发现问题只发生在 Symfony 框架上(我没有准确地说,我的错)。似乎 Ajax 调用会锁定任何其他未来调用。它可能与控制器或路由系统有关,我正在调查它。
同样对于那些对这里的问题感兴趣的人是我的新测试用例:-使用 Symfony 1.4.3 的新项目,默认配置,我刚刚创建了一个应用程序和一个默认模块。-jquery 1.4 用于 ajax 查询。
这是我的 actions.class.php (在我独特的模块中):
class defaultActions extends sfActions
{
public function executeIndex(sfWebRequest $request)
{
//Do nothing
}
public function executeNewpage()
{
//Do also nothing
}
public function executeWaitingaction(){
// Wait
sleep(30);
return false;
}
}
这是我的 indexSuccess.php 模板文件:
<script type="text/javascript" src="jquery-1.4.1.min.js"></script>
<a href="<?php echo url_for('default/newpage');?>">Go to another symfony action</a>
<script type="text/javascript">
url = '<?php echo url_for('default/waitingaction');?>';
$.get(url);
</script>
对于新的页面模板,它不是很相关......但是有了这个,我能够重现我在实际应用程序中遇到的锁定问题。
其他人有同样的问题吗?
谢谢。