2016-02-04 48 views
3

Laravel 5.2不從跨域jQuery的負載識別請求作爲AJAX()方法:Laravel 5.2不能識別跨域jQuery的方法,AJAX

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()方法被識別爲AJAX。

任何想法?

+0

我雖然你不能做到這一點,除非因到jQuery中的安全問題/限制。您必須使用其他替代方法才能使請求正常工作,例如「CORS」。儘管如此,我對CORS的要求知之甚少。 – Casey

回答

0

創建包含「X-要求,以」作爲允許的頭一個CORS中間件文件:

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的load()方法與阿賈克斯()和 'X-要求,隨着' 頭添加到jQuery的AJAX調用:

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

Laravel的HTTP請求類擴展了Symfony,它檢查請求的X-Requested-With標頭設置爲'XMLHttpRequest'。這個頭是默認不跨域請求發送與jQuery,除非您禁用了跨域保護:

$.ajax({ 
    url: 'http://example.com/', 
    crossDomain: false 
});