为什么AngularJSON数据是嵌套的?

为什么AngularJSON数据是嵌套的?,angularjs,json,object,nested,Angularjs,Json,Object,Nested,我有一个服务返回这个简单的json: { "successYN": true, "msg": "Success!", "errors": null } 我有一个控制器: app.controller('formController', function ($http, $httpParamSerializerJQLike) { var frmVM = this frmVM.formData = {} frmVM.frmSubmit = function () { c

我有一个服务返回这个简单的json:

{
   "successYN": true,
   "msg": "Success!",
   "errors": null
}
我有一个控制器:

app.controller('formController', function ($http, $httpParamSerializerJQLike) {
var frmVM = this
frmVM.formData = {}

frmVM.frmSubmit = function () {
    console.log('form was submitted with: ' + frmVM.formData.name + ' ' + frmVM.formData.superheroAlias)

    // post the data to the back end
    $http({
            method: 'POST',
            url: '/contact-post',
            data: $httpParamSerializerJQLike(frmVM.formData),  // pass in data as strings
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }  // set the headers so angular passing info as form data (not request payload)
        })
        .then(function (data) {

            console.log(data);

            var innerData = data.data;

            console.log(innerData)
            console.log(innerData.errors)
            console.log(innerData.successYN)

            if (!innerData.successYN) {
                console.log("Not successful!")
                // if not successful, bind errors to error variables
                frmVM.errorName = innerData.errors.name;
                frmVM.errorSuperhero = innerData.errors.superheroAlias;
            } else {
                // if successful, bind success message to message
                frmVM.message = innerData.msg;
            }
        });
    };
})
我的表单中有
控制器作为
语法,一切正常。但是, 我在中看到的数据对象如下所示:

 var innerData = data.data;

因此,必须按如下方式访问数据:

 var innerData = data.data;
在访问数据之前:

 console.log(innerData.successYN)
有人能解释为什么会发生这种情况和/或我做错了什么吗?

在参数中,“数据”基本上是响应对象,它包含响应头和响应体。 例如: 如果您需要参数响应,那么为了获得响应数据,您必须调用

var data=response.data

如果您想从响应中获取标题,则必须执行以下操作:

var authorization = response.headers('Authorization');
在.then函数中,您必须传递2个处理程序,1个处理程序用于成功响应(200OK),第2个处理程序用于失败响应(400BAD请求)

所以

在参数中,“数据”基本上是响应对象,它包含响应头和响应体。 例如: 如果您需要参数响应,那么为了获得响应数据,您必须调用

var data=response.data

如果您想从响应中获取标题,则必须执行以下操作:

var authorization = response.headers('Authorization');
在.then函数中,您必须传递2个处理程序,1个处理程序用于成功响应(200OK),第2个处理程序用于失败响应(400BAD请求)

所以


$http
将以下面的格式返回数据,因为这是数据的定义方式

来自服务器的响应是具有以下属性的对象:

1) .config用于生成请求的对象

2) .数据一个字符串或对象,承载来自 服务器

3) .headers用于获取标题信息的函数

4) .status定义HTTP状态的数字

5) .statusText定义HTTP状态的字符串


$http
将以下面的格式返回数据,因为这是数据的定义方式

来自服务器的响应是具有以下属性的对象:

1) .config用于生成请求的对象

2) .数据一个字符串或对象,承载来自 服务器

3) .headers用于获取标题信息的函数

4) .status定义HTTP状态的数字

5) .statusText定义HTTP状态的字符串


你没有做错什么。这是来自AngularJS中http请求生成器的响应。它添加了一些响应头、有关请求的信息以及从服务器检索的
数据。它将数据存储在一个
data
对象中,您可以从JSON文件访问JSON对象键。谢谢,您应该将此作为一个答案,因为它最好地解释了正在发生的事情。您没有做错什么。这是来自AngularJS中http请求生成器的响应。它添加了一些响应头、有关请求的信息以及从服务器检索的
数据。它将数据存储在一个
data
对象中,您可以从JSON文件访问JSON对象键。谢谢,您应该将此作为一个答案,因为它最好地解释了正在发生的事情。谢谢您的回复。但是我看到过代码做过这样的事情
.success(函数(数据){if(!data.success){
。我为什么要做
数据。数据。成功
?兄弟,请看更新。你必须这样做。如果你有任何问题,请告诉我。不鼓励成功,请看下面的链接谢谢,我想上面@C0dekid的评论解释得最好。我在后端使用Nancy,它正在创建一个响应object带有标题等,数据嵌入到该对象的较低位置。下面的示例使用PHP
echo json_encode($data);
,我认为它只返回一个字符串。但是,我将
。然后(function(data){
改为
。然后(function(response){
现在这很有意义,我可以接受。谢谢你的回复。但是我看到代码做了这样的事情
.success(函数(数据){if(!data.success){
。我为什么要做
数据。数据。成功
?兄弟,请看更新。你必须这样做。如果你有任何问题,请告诉我。不鼓励成功,请看下面的链接谢谢,我想上面@C0dekid的评论解释得最好。我在后端使用Nancy,它正在创建一个响应obje我下面的例子使用PHP
echo json_encode($data);
,我认为它只是返回一个字符串。但是,我将
。然后(函数(数据){
改为
。然后(函数(响应){
,现在它是有意义的,我可以接受它。