Devil May Code...

Vergil's Blog

前言

一般来说,AJAX请求与普通HTTP请求没有任何的区别。但jQuery框架会在Request header加上X-Requested-With:XMLHttpRequest

但这并不是一个标准,所以并非所有AJAX请求都会发送这个request header。原生的XMLHttpRequest对象就没有这个东西。

AngularJS的$http服务也不会发送这个header。

由于jQuery的流行,很多PHP框架会以此来判断这个请求是否AJAX。

例如:

LaravelIlluminate\Http\Request::ajax()方法。该类继承自Symfony框架的Symfony\Component\HttpFoundation\Request并使用了它的isXmlHttpRequest()来判断是否AJAX请求。

国内著名的ThinkPHP框架,IS_AJAX常量也是以此来判断是否AJAX。

define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 

设置$httpProvider

默认的请求头保存在$httpProvider.defaults.headers.common对象中。默认的头如下所示:

Accept:"application/json, text/plain, */*"

通过.config()方法可以这些头进行修改或扩充,如下所示:

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

也可以在运行时通过$http对象的default属性对这些默认值进行修改。例如,通过如下方法可以动态添加一个头:

$http.defaults.common['X-Requested-With'] = 'XMLHttpRequest';

对于单个请求,也可以通过设置$http请求的headers选项实现。

也可以只对POST和PUT类型的请求进行设置。POST和PUT请求的默认头如下:

Content-Type:application/json;charset=utf-8

可以在.config()方法中对这些请求的头进行修改和扩充;

angular.module('app',[])
    .config(['$httpProvider', function($httpProvider){
        $httpProvider.defaults.headers.post['X-Posted-By'] = 'MyAngularApp';
        
    }]);

仅有一条评论 »

  1. View Image Must Need It looks like Richard just doesnt do it for Christy anymore!

添加新评论 »

在这里输入你的评论...

Powered by Typecho.