我遇到了一个奇怪的问题,当我使用angular $ resource执行PUT时,新添加的对象的字段变为null。数据是一堆嵌套对象。当用户将列表项拖到另一个列表时,该项将被推送到数据中的关联对象,并提示用户添加“注释”。之后,“评论”字段会正确更新。现在,如果用户按下“保存”按钮,我会执行PUT来更新后端上的对象。刷新页面时,将显示新添加的对象,但其注释字段为空。我在PUT之前查看了数据,并且仍然按预期填充了“注释”字段,但是当我在Chrome中查看PUT XHR时,“注释”字段为空。奇怪的是,当添加这样的新对象时,会填充许多字段,例如“注释”字段,但只有“注释”字段变为空。我希望有人可以向我解释一下。以下是一些示例代码:
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?
}
]
这是我的$资源调用:
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'
}
})
};
});
答案 0 :(得分:1)
我想出了这个。我误读了Chrome中的XHR数据。该字段实际上并不为null,但确实填充了预期的数据。返回数据是空字段。换句话说,我们在后端遇到了一个问题,即它没有正确保存所有正在发送的字段,并且对PUT的响应很糟糕。