2016-02-04 5 views
3

Laravel 5.2 не распознает запрос, как AJAX от междоменного JQuery нагрузки() метод:Laravel 5.2 не распознает метод JQuery кросс-домен, как АЯКС

JQuery с сайта одного:

$('#results').load('http://site2.com/test'); 

метод контроллера на участке два:

public function myMethod(Request $request) 
    { 
     header("Access-Control-Allow-Origin: *"); 
     header('Access-Control-Allow-Credentials: true'); 

     if (!$request->ajax()) { 
      abort(403, 'Invalid Request'); 
     } 
      // do something 
    } 

запроса принимается и не имеет другие не признаются в качестве запроса AJAX вопросов. Метод load(), вызываемый из того же домена IS, распознается как AJAX.

Любые идеи?

+0

я, хотя вы не можете сделать это, если из-за к проблемам безопасности/ограничениям в jQuery. Вы должны использовать другие альтернативы, чтобы заставить запрос полностью функционировать, как «CORS». Я не знаю много о запросе CORS. – Casey

ответ

0

Создайте файл промежуточного CORS, который включает в себя «X-Requested-With» в качестве разрешенного заголовка :

public function handle($request, Closure $next) 
    { 
     header('Access-Control-Allow-Origin: *'); 

     $headers = [ 
      'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE', 
      'Access-Control-Allow-Headers' => 'X-Requested-With, Content-Type, X-Auth-Token, Origin, Authorization' 
     ]; 

     if ($request->getMethod() == "OPTIONS") { 
      return Response::make('OK', 200, $headers); 
     } 

     $response = $next($request); 
     foreach ($headers as $key => $value) 
      $response->header($key, $value); 
     return $response; 
    } 

Заменить JQuery нагрузки() метод с Ajax() и добавить 'X-Requested-With' заголовок вызова JQuery AJAX:

$.ajax({ 
    type: 'GET', 
    url: 'http://site2.com/test', 
    headers: {'X-Requested-With': 'XMLHttpRequest'}, 
    success: function (data) 
     { 
      //do something 
     } 
}); 
1

Класс HTTP-запроса Laravel расширяет Symfony, который проверяет, что заголовок X-Requested-With запроса имеет значение «XMLHttpRequest». Этот заголовок не отправляется в кросс-доменных запросов с Jquery по умолчанию, если вы не отключите его защита междоменное:

$.ajax({ 
    url: 'http://example.com/', 
    crossDomain: false 
}); 
Смежные вопросы