Laravel angularjs Request :: ajax()总是假的

时间:2013-12-09 16:22:45

标签: php ajax angularjs coffeescript laravel-4

我正在使用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()
    )

3 个答案:

答案 0 :(得分:37)

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

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

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

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

答案 1 :(得分:22)

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

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

对于wantsJson的存在,Accepts方法依赖于标准X-Requested-With HTTP标头(而非非标准application/json标头)。只要Angular JS默认将其保留并且您没有故意删除它,这个方法应该是可靠的。

答案 2 :(得分:13)

对于AngularJs新手,寻找添加$httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"

的位置

以下是一个例子:

var angularApp = angular
  .module('angularApp', [
    'ngResource',
  ])
  .config(['$httpProvider', function($httpProvider) {
      $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
  }]);