我使用laravel作为后端,而angujarjs作为前端来制作应用程序。前端位于另一台服务器,因此我必须处理跨域策略。我启用了CORS,所以我可以发送"发布请求。
问题是,当我试图在laravel中获取Input :: all()时,请求被取消。 (状态显示'取消'在Chrome网络中)。但是当我不使用输入时,一切都还可以。
//laravel
class SessionController extends BaseController {
protected $entity;
public function __construct(SessionEntity $entity)
{
$this->entity = $entity;
}
public function getLogin()
{
return Response::json('hello')->header('Access-Control-Allow-Origin', '*');
}
public function postLogin()
{
//$data = Input::all();
//return Response::json($data);
// $user = $entity->login($data);
// if($user)
// {
// return Response::json($user);
// } else {
// return Response::json($entity->errors(), 400);
// }
//the code below is OK (able to send response back) , but the code above is not, because I am using Input::all()
$data = array(
"email" => "324234",
"password" => "654321"
);
return Response::json($data);
}
}
// angularjs
.controller('LoginController', ['$scope', '$http', function($scope, $http) {
$scope.send = function(credential) {
$http({
method: 'POST',
url: 'http://localhost:8000/api/session/login',
data: credential,
headers: {
'Content-Type': 'application/json; charset=UTF-8'
}
})
.success(function(data, status, headers) {
console.log(data);
console.log(status);
console.log(headers);
});
};
}]);
这是启用CORS的标头
App::after(function($request, $response)
{
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT');
$response->headers->set('Access-Control-Allow-Headers', 'Content-Type');
$response->headers->set('Access-Control-Allow-Credentials', 'true');
$response->headers->set('Access-Control-Max-Age', '1728000');
$response->headers->set('Content-Type', 'application/json; charset=UTF-8');
return $response;
});
我错过了什么?
答案 0 :(得分:0)
我找到了。我使用命名空间但不包括'use Input'。 傻乎乎的......
另外,我发现我必须将Content-Type显式设置为'application / json',以便在laravel中使用Input :: all()接收数据,否则我没有数据。
答案 1 :(得分:0)
对于跨域请求,您必须使用 jsonp 而不是 json