我打电话给进程在后端生成PDF使用Angular中的REST请求(我使用restangular来创建这些)。允许进一步的Ajax请求到php,同时处理第一个请求继续
我的问题是,我希望用户能够继续工作,而这个过程正在工作,因为PDF生成可能需要一段时间。就像测试一样,我创建了一个延迟5秒的服务,然后将数据返回给客户端。我这样称呼它:
var d = $q.defer();
Restangular
.all('delay')
.getList()
.then(function (data) {
d.resolve(data);
}, function() {
d.reject();
});
return d.promise;
这工作正常,但我在通话之前完成的任何其他请求已被阻止。如果我链接了.then函数,但我会调用一个完全独立的REST请求。
我必须等待生成PDF的服务在返回客户端之前完成,否则其他明智的过程将无法完成。那么,我必须等待还是可以同时运行两个或多个REST请求?
谢谢!
编辑.... 似乎没有人对这个问题感兴趣!无论如何,我一直在寻找从PHP返回请求的选项,以允许JavaScript继续运行,这种一半的作品。有此答案散落在计算器的几个版本 - 这一个从here
public function delay()
{
ignore_user_abort(true);
set_time_limit(0);
ob_start();
// do initial processing here
echo 'Text the user will see';
header('Connection: close');
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
// Do processing here
$d = time();
sleep(5);
$t = time()-$d;
echo('Text user will never see');
}
public function runtime()
{
$d = time();
$t = time()-$d;
return $t;
}
在现实中,什么情况是,PHP的推移并将响应返回给浏览器,然后因为它应该处理进行。但是,来自客户端的下一个请求仍然等待第一个请求在运行之前完成处理。
我想要的行为是PHP开始,就好像我是打电话从其他浏览器的方法一个新的线程(当然,我已经测试和它的作品)