我对 $http.delete() 和 $window.location.reload() 函数有一个有趣的问题。基本上我正在调用一个删除方法,该方法又调用 $http.delete() 调用,该调用 - 使用 REST API 接口 - 从数据库(mongoDB)中删除数据。由于未知的原因,这是正在发生的事情:
- 在数据库中删除成功
- 这已得到验证,因为数据不再在数据库中
- 还使用 Chrome DevTools 监控它显示状态:200
- $window.location.reload() 被调用并且没有任何反应
- Chrome DevTools 显示对域根目录的 GET 调用,但状态为“待定”
页面没有超时,基本上一直在加载加载加载。一旦我点击刷新 / CTRL-F5 一切都会恢复正常,我可以看到我的项目已被删除。
我的代码的一些摘录:
应用程序.js
angular.module('contacts', ['ngRoute', 'contacts.factory', 'contacts.filters', 'ui.bootstrap']).
config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider.
when('/', {
templateUrl: '/p/list',
controller: ListCtrl,
}).
otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(true);
}]);
控制器.js
function ListCtrl($scope, $modal, contactFactory) {
//code removed
$scope.delete = function(c) {
var id = c._id;
var modalInstance = $modal.open({
templateUrl: 'deleteContactModal',
controller: deleteContactModalCtrl,
resolve: {
contact: function() {
return contactFactory.getContact(id);
}
}
});
}
}
var deleteContactModalCtrl = function($scope, $route, $modalInstance, $window, contact, contactFactory) {
$scope.name = contact.data.contact.name;
$scope.deleteContact = function() {
contactFactory.deleteContact(contact.data.contact._id).success(function() {
//have also tried: $window.location.reload(true);
//as well as window.location.href('/') - didn't work either
$modalInstance.close($window.location.reload());
});
};
}
工厂.js
angular.module("contacts.factory", []).
factory('contactFactory', function($http){
return {
//code removed
deleteContact: function(id) {
return $http.delete('/api/contact/' + id);
}
}
});
后端 - app.js
//usual express setup
app.delete('/api/contact/:id', api.delete); //delete contact
后端 - api.js
//code removed
exports.delete = function (req, res) {
var id = req.params.id;
if (id) {
ContactModel.findById(id, function (err, contact) {
contact.remove(function (err) {
if (!err) {
res.json(true);
} else {
res.json(false)
console.log(err);
}
});
});
}
};
目前我什至不确定这个问题是否与前端或后端有关。如前所述 - 后端部分工作正常 - 数据已从数据库中删除。