【问题标题】:Laravel 5.2 not recognizing cross-domain jQuery method as AJAXLaravel 5.2 无法将跨域 jQuery 方法识别为 AJAX
【发布时间】:2016-05-14 06:07:53
【问题描述】:

Laravel 5.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。

有什么想法吗?

【问题讨论】:

  • 我虽然你不能这样做,除非由于 jQuery 中的安全问题/限制。您必须使用其他替代方法才能使请求完全正常运行,例如“CORS”。不过,我对 CORS 请求了解不多。

标签: php jquery ajax laravel laravel-5.2


【解决方案1】:

创建一个包含“X-Requested-With”作为允许标头的 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() 方法替换为 ajax() 并在 jQuery AJAX 调用中添加一个“X-Requested-With”标头:

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

【讨论】:

    【解决方案2】:

    Laravel 的 HTTP 请求类扩展了 Symfony 的,它检查请求的 X-Requested-With 标头是否设置为“XMLHttpRequest”。默认情况下,此标头不会在使用 jQuery 的跨域请求中发送,除非您禁用其跨域保护:

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

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2014-06-22
      • 2012-10-27
      • 1970-01-01
      相关资源
      最近更新 更多