AngularJs,同时发射请求

时间:2014-01-06 04:46:13

标签: php ajax angularjs

我有以下代码:

Angular Code:

$http.get('admin/a').success(function(){
        console.log("A finish");
    });
$http.get('admin/b').success(function(){
    console.log("B finish");
});

PHP代码:

Route::group(array('prefix' => 'admin'), function()
{   
    Route::get('a', array('before' => 'auth.backend', function(){  
        // SLEEP!
        sleep(5);       
        return Response::json(array('a' => 'a'));
    }));

    Route::get('b', array('before' => 'auth.backend', function(){               
        return Response::json(array('b' => 'b'));
    }));
}

我的问题是第二个http呼叫在第一个http呼叫结束后才开始,因为你看到第一个路由睡了五秒钟。

是否有人知道火灾并同时启动此请求?

谢谢!

2 个答案:

答案 0 :(得分:2)

你拥有的JS代码是正确的。您的服务器实际上是在请求A之后立即发送了对B的请求(您可以在浏览器的开发工具的网络面板中进行验证)但是睡眠阻止服务器实际processing B直到A完成。

这个问题讨论了睡眠替代方案的这个问题:How can I stop PHP sleep() affecting my whole PHP code?

答案 1 :(得分:2)

此行为是由于第一次调用(/ admin / a)在其休眠持续时间内持有会话锁定,因此第二次调用(/ admin / b)无法在没有会话锁定的情况下继续进行。

您可以在睡觉前通过拨打session_write_close()解锁会话。

如果您需要在唤醒后在第一个功能中访问会话,请参阅how to reopen the session上的此答案。