AngularJS ajax http promise返回额外的数据

AngularJS ajax http promise returns additional data

本文关键字:数据 返回 ajax http promise AngularJS      更新时间:2023-09-26

在promise then函数中,当您收到数据对象时,它被另一个数据对象包装,如

data = Object {data: Object, status: 200, config: Object, statusText: "OK"}

如何避免这种情况。您需要访问您的变量,如data.data.myVar

var test123 = $scope.test();
    test123.then(function(data){
        console.log(data);
        // why you need to access your data in "data.data.myValue"   
    },function(data){
    });

$scope.test = function(){
        var promise =  $http(
                {
                    method: 'GET',
                    dataType: "jsonp",
                    url: 'json/requestKey.json'
                }
        )
        .success(function(data) {
            return data;
        })
        .error(function(data){
            //return data;
        });
        return promise;
};

从"service"返回数据部分。你可以抛弃多余的承诺,因为$http已经是一个承诺。

$scope.test().then(function(data) {
  console.log(data);
});
$scope.test = function() {
  return $http('json/requestKey.json').then(function(response) {
    return response.data;
  });
};

这有两种解决方法

  1. 尝试返回结果对象,而不是将其包裹在另一个对象周围,然后返回到服务器端的客户端。
  2. $httpsuccess()回调中,返回data.data而不仅仅是return data,这样在then()函数中您将获得内部对象。

当你返回时,HttpResponseMessage, REST api以这种格式响应数据,

Object {data: Object, status: 200, config: Object, statusText: "OK"}

在ajax中解析成功回调,

  $http.get(urlBase + '/get/' + id).then(function (response) {
                  var yourData = response['data'];
                  var yourStatusCode = response['status'];
                  var yourStatusText = response['statusText'];
                  //assign data to any other $scope object 
                  $scope.product = yourData;
              }, function (error) {
                            console.log('error occured!!');
              });

你现在可以做得很好,你现在不需要改变web api的响应