jQuery.ajax()
通常会将X-Requested-With
标头设置为XMLHttpRequest
作为内容。在服务器上(在PHP中),我通常通过测试来检测:
$is_ajax = $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest'
$routeProvider.when()
中常见的AngularJS,您可以使用templateUrl: '/path/on/server'
从服务器获取模板。
我的问题 templateUrl
请求似乎不设置X-Requested-With
标头,因此无法区分templateUrl
个请求来自任何其他类型的请求。
有没有办法让$routeProvider
将X-Requested-With
作为XMLHttpRequest
发送?
参考:
$routeProvider Docs - (搜索templateUrl
)
jQuery jqXHR - 请参阅jqXHR.setRequestHeader("X-Requested-With", "XMLHttpRequest")
v1.1.5
更新:我找到了actual commit Angular开发人员从X-Requested-With
删除$http.get
的地方。不知道为什么他们会这样做?
更新: https://github.com/angular/angular.js/issues/1004 - 讨论删除标题的位置。
答案 0 :(得分:14)
FreeNode的#angularjs
中的 Zerot 的提示app.config(['$routeProvider', '$httpProvider', function($routeProvider, $httpProvider) {
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
$routeProvider.when('/', {
templateUrl: '/path/on/server',
controller: 'Ctrl'
});
});
编辑:更具体地说,这是你需要的地方:
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';