无法获取跨站点域发送的输入数据

时间:2014-08-24 05:47:43

标签: php angularjs laravel

我使用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;

});

我错过了什么?

2 个答案:

答案 0 :(得分:0)

我找到了。我使用命名空间但不包括'use Input'。 傻乎乎的......


另外,我发现我必须将Content-Type显式设置为'application / json',以便在laravel中使用Input :: all()接收数据,否则我没有数据。

答案 1 :(得分:0)

对于跨域请求,您必须使用 jsonp 而不是 json