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

Другие вопросы по тегам