放入 angularjs 时对象字段变为空
Object field becomes null while doing a put in angularjs
我 运行 遇到了一个奇怪的问题,当我使用 angular $resource 进行 PUT 时,新添加对象的字段变为空。数据是一堆嵌套对象。当用户将列表项拖到另一个列表时,该项目将被推送到数据中的关联对象上,并提示用户添加 'Comments'。之后, 'Comment' 字段被正确更新。现在,如果用户按下 'Save' 按钮,我将执行 PUT 以更新后端的对象。当页面刷新时,新添加的对象出现了,但是它的comments字段为空。我查看了 PUT 之前的数据,'Comments' 字段仍按预期填充,但是当我在 Chrome 中查看 PUT XHR 时,'Comments' 字段为空。奇怪的是,当添加这样的新对象时,会填充许多字段,例如 'Comments' 字段,但只有 'Comments' 字段变为空。我希望有人能给我解释一下。这是一些示例代码:
DnD操作前的原始对象:
myData = [
{
Field1: 'Data',
Field2: 'Data',
Comments: 'Data',
}
{
// More objects like this
}
]
DnD 之后:
[
{
Field1: 'Data',
Field2: 'Data',
Comments: 'Data',
},
{
// More objects like this
},
{
Field1: 'Data',
Field2: 'Data',
Comments: 'New comments',
}
]
MyService.http.update({
data1ID:myData.data1ID,
data2ID: myData.data2ID
}, myData).$promise.then(function() { // Here the Comments field is still populated
myData.isDirty = false;
};
在 PUT XHR 中,我在美化后看到了这个:
[
{
Field1: 'Data',
Field2: 'Data',
Comments: 'Data',
},
{
// More objects like this
},
{
Field1: 'Data',
Field2: 'Data',
Comments: null, // What gives?
}
]
这是我的 $resource 调用:
angular.module('myApp').factory('MyDataService', function ($resource, $window) {
return {
http: $resource(myUsualURLForGETsANDPOSTs, {
data1ID: '@data1ID',
data2ID: '@data2ID',
data3ID: '@data3ID'
}, { //parameters default
update: {
url: myPUTURL,
method: 'PUT'
},
get: {
method: 'GET'
},
post: {
method: 'POST'
}
})
};
});
我想通了。我误读了 Chrome 中的 XHR 数据。该字段实际上不是空的,但确实填充了预期的数据。 return 数据有空字段。换句话说,我们在后端遇到了问题,它没有正确保存所有正在发送的字段并且对 PUT 的响应很糟糕。
我 运行 遇到了一个奇怪的问题,当我使用 angular $resource 进行 PUT 时,新添加对象的字段变为空。数据是一堆嵌套对象。当用户将列表项拖到另一个列表时,该项目将被推送到数据中的关联对象上,并提示用户添加 'Comments'。之后, 'Comment' 字段被正确更新。现在,如果用户按下 'Save' 按钮,我将执行 PUT 以更新后端的对象。当页面刷新时,新添加的对象出现了,但是它的comments字段为空。我查看了 PUT 之前的数据,'Comments' 字段仍按预期填充,但是当我在 Chrome 中查看 PUT XHR 时,'Comments' 字段为空。奇怪的是,当添加这样的新对象时,会填充许多字段,例如 'Comments' 字段,但只有 'Comments' 字段变为空。我希望有人能给我解释一下。这是一些示例代码:
DnD操作前的原始对象:
myData = [
{
Field1: 'Data',
Field2: 'Data',
Comments: 'Data',
}
{
// More objects like this
}
]
DnD 之后:
[
{
Field1: 'Data',
Field2: 'Data',
Comments: 'Data',
},
{
// More objects like this
},
{
Field1: 'Data',
Field2: 'Data',
Comments: 'New comments',
}
]
MyService.http.update({
data1ID:myData.data1ID,
data2ID: myData.data2ID
}, myData).$promise.then(function() { // Here the Comments field is still populated
myData.isDirty = false;
};
在 PUT XHR 中,我在美化后看到了这个:
[
{
Field1: 'Data',
Field2: 'Data',
Comments: 'Data',
},
{
// More objects like this
},
{
Field1: 'Data',
Field2: 'Data',
Comments: null, // What gives?
}
]
这是我的 $resource 调用:
angular.module('myApp').factory('MyDataService', function ($resource, $window) {
return {
http: $resource(myUsualURLForGETsANDPOSTs, {
data1ID: '@data1ID',
data2ID: '@data2ID',
data3ID: '@data3ID'
}, { //parameters default
update: {
url: myPUTURL,
method: 'PUT'
},
get: {
method: 'GET'
},
post: {
method: 'POST'
}
})
};
});
我想通了。我误读了 Chrome 中的 XHR 数据。该字段实际上不是空的,但确实填充了预期的数据。 return 数据有空字段。换句话说,我们在后端遇到了问题,它没有正确保存所有正在发送的字段并且对 PUT 的响应很糟糕。