Laravel Response :: json在浏览器中提供跨域错误,即使标题是Access-Control-Allow-Origin:*

时间:2013-09-12 12:28:56

标签: ajax jquery laravel laravel-4 allow-same-origin

我得到了这个Laravel 4问题让我很困惑。我在同一个控制器上创建了这两个方法。声明控制器是宁静的。 ajax请求来自不同的域。

不起作用

public function getOwnlist(){
    $test = User::with(array("images", "images.category"))->find(Auth::user()->id);
    return Response::json($test, 200, array('Access-Control-Allow-Origin' => '*'));
}

作品

public function getLatest(){
        $images = DB::table("images")->where("public","=","1")->orderBy("created_at")->take(10)->get();
        return Response::json($images, 200, array('Access-Control-Allow-Origin' => '*'));
}

浏览器获得标准的跨域错误。

1 个答案:

答案 0 :(得分:3)

这个例子对我有用,你可以试试这个。

public function getOwnlist(){
   $images = User::with('images.category')->find(Auth::getUser()->getAttribute('id'));
   return Response::json($images, 200, array('Access-Control-Allow-Origin' => '*'));
}

另外,我强烈建议在Controller Base的构造函数上设置它们,而不是在每个响应中设置标题。或者,您只能创建一个API来提供API并从中扩展。

应该是这样的:

protected $response; // This is a global variable on you BaseController

// This goes on your BaseController constructor 
$this->response = Response::make();
$this->response->headers->add(array('Access-Control-Allow-Origin', '*');

我在使用jQuery时发现了跨域AJAX的一些问题,如果我指定域而不是*,它只对我有用。

有关雄辩模型的更多信息: http://laravel.com/docs/eloquent#querying-relations