Laravel angularjs Request::ajax() always false

2022-08-30 14:46:33

我正在用angularjs和laravel 4构建应用程序。一切都很好,但我现在需要只允许XHR请求。

这就是我在控制器开始时所拥有的。但这种说法总是错误的。

    if (!\Request::ajax())
    {
        return Response::json(array('halt'=>Request::ajax()));
    };

在角度中,我使用的是标准的$http服务。

angular.module('APP')
.factory("API", ($http,$q,appClient,apiURL) ->
 class FB
  constructor:->
    this.deferredData = $q.defer();
  info: (reload)->
    $http(
      method: "get"
      url: apiURL+'game/'+appClient+"/info"
    ).success((res)->
      dostuff()
    )

答案 1

执行 AJAX 调用时,标头通常设置为 。Laravel的方法建立在Symfony2方法之上,该方法只是检查此标头是否存在。X-Requested-WithXMLHttpRequestRequest::ajax()

2012年10月,Angular.js删除了这个标题,因为他们觉得它很少被使用。

正如@Thrustmaster和你自己在评论中提到的,你需要设置:

$httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"

答案 2

如果您不想修改前端角度应用程序(或不能),而宁愿修改Laravel代码以区分Angular JS AJAX请求与其他请求,您也可以使用Request::wantsJson()

if(Request::wantsJson()) {
    // Client wants JSON returned 
} else {
    // Client does not want JSON returned
}

该方法依赖于标准 HTTP 标头(而不是非标准标头)来显示 。只要Angular JS默认将其保留并且您不故意删除它,此方法应该是可靠的。wantsJsonAcceptsX-Requested-Withapplication/json


推荐