Page 146 - AngularJS权威教程
P. 146

126  第 15 章  同外界通信:XHR 和服务器通信


                 var promise = $http({
                     method: 'GET',
                     url: '/api/users.json'
                 });
                 由于$http方法返回一个promise对象,我们可以在响应返回时用then方法来处理回调。如果
             使用then方法,会得到一个特殊的参数,它代表了相应对象的成功或失败信息,还可以接受两个
             可选的函数作为参数。或者可以使用success和error回调代替。

                 promise.then(function(resp){
                     // resp是一个响应对象
                 }, function(resp) {
                     // 带有错误信息的resp
                 });
                 // 或者使用success/error方法
                 promise.success(function(data, status, headers, config){
                     // 处理成功的响应
                 });
                 // 错误处理
                 promise.error(function(data, status, headers, config){
                     // 处理非成功的响应
                 });

                 如果响应状态码在200和299之间,会认为响应是成功的, success回调会被调用,否则error
             回调会被调用。



                         注意,如果响应结果是重定向,XMLHttpRequest会跟进这个重定向,error回
                        调并不会被调用。

                 我们可以调用HttpPromise对象上的then()、success()和error()方法。then()方法与其
             他两种方法的主要区别是,它会接收到完整的响应对象,而success()和error()则会对响应对
             象进行析构。

                 调用http方法后,在下一个$digest循环运行之前它并不会被真正执行。尽管大部分情况下
             我们都是在$apply代码快内部使用$http,但也可以在AngularJS的$digest循环以外执行这个
             方法。

                 如果要在AngularJS的$digest循环以外执行$http函数,需要将其封装在一个$apply代码快
             中。这样会强制digest循环执行,我们的promise可以按预期那样被resolve。
                 $scope.$apply(function(){
                     $http({
                         method: 'GET',
                         url: '/api/users.json'
                     });
                 });

             快捷方法

                 $http服务提供了一些顺手的快捷方法供我们使用,这些方法简化了复杂设置,只需要提供
             URL和HTTP方法(或者POST或PUT请求中包含的数据)即可。
                 用这些快捷方法,可以将上面$http的GET请求修改成:
   141   142   143   144   145   146   147   148   149   150   151