Laravel Response::json выдает междоменную ошибку в браузере, даже если заголовок Access-Control-Allow-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 ответ
Этот пример работает для меня, вы можете попробовать это.
public function getOwnlist(){
$images = User::with('images.category')->find(Auth::getUser()->getAttribute('id'));
return Response::json($images, 200, array('Access-Control-Allow-Origin' => '*'));
}
Кроме того, я настоятельно рекомендую устанавливать их в конструкторе базы контроллеров вместо того, чтобы устанавливать заголовки в каждом ответе. Или вы можете создать его только для обслуживания 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', '*');
Я обнаружил некоторые проблемы с кросс-доменом AJAX при использовании jQuery, он работает только для меня, если я укажу домен вместо использования *
,
Дополнительная информация о Eloquent Models: http://laravel.com/docs/eloquent