13

jQuery.ajax()通常发送一个X-Requested-With带有XMLHttpRequest设置为内容的标头。在服务器上(在 PHP 中),我通常通过测试来检测:

$is_ajax = $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest'

AngularJS中,常见于 中$routeProvider.when(),您可以使用templateUrl: '/path/on/server'.

我的问题是请求templateUrl似乎没有设置X-Requested-With标头,因此无法将templateUrl请求与任何其他类型的请求区分开来。

有什么办法可以$routeProvider发送X-Requested-WithXMLHttpRequest

参考:

  • $routeProvider 文档- (搜索templateUrl

  • jQuery jqXHR - 见jqXHR.setRequestHeader("X-Requested-With", "XMLHttpRequest")

  • v1.1.5通过Google CDN使用 Angular

  • 更新:我找到了Angular开发人员X-Requested-With$http.get. 想知道他们为什么要这样做?

  • 更新: https ://github.com/angular/angular.js/issues/1004 - 讨论删除标头的位置。

4

1 回答 1

15

在 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';

于 2013-07-20T16:36:41.443 回答