我正在使用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()
)
答案 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';
}]);