Laravel5.2没有从跨域jQuery load()方法中识别请求为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。
有什么想法吗?
发布于 2016-02-04 17:37:09
创建一个CORS中间件文件,其中包含“X请求-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;
}用ajax()替换jQuery load()方法,并向jQuery AJAX调用中添加一个“X请求-带有”头:
$.ajax({
type: 'GET',
url: 'http://site2.com/test',
headers: {'X-Requested-With': 'XMLHttpRequest'},
success: function (data)
{
//do something
}
});发布于 2016-02-04 16:10:30
Laravel的HTTP请求类扩展了Symfony类,该类检查请求的X-请求,头被设置为'XMLHttpRequest‘。默认情况下,此标头不会在带有jQuery的跨域请求中发送,除非禁用其跨域保护:
$.ajax({
url: 'http://example.com/',
crossDomain: false
});https://stackoverflow.com/questions/35204248
复制相似问题