Как отправить данные с помощью запроса angularjs $http.delete()?
У меня есть ресурс "ролей", который имеет много-много отношений с "пользователем". Для администрирования "ролей" мне нужно отправить идентификатор роли и идентификатор пользователя на сервер, чтобы удалить эту роль от правильного пользователя (необязательно зарегистрированного пользователя).
Вот что я пытался, но в соответствии с docs это невозможно. Я знаю, что могу отправить два идентификатора в uri, но мой laravel backend автоматически устанавливает находчивый маршрут ресурса /{resourceid}, который я хотел бы использовать, если это возможно. Есть ли способ сделать это, что мне не хватает?
var removeRole = function (roleid, userid) {
var input =[];
input.user = userid;
$http.delete('/roles/' + roleid, input).success(function (data, status) {
console.log(data);
});
};
Ответы
Ответ 1
Вы можете выполнить http DELETE с помощью URL-адреса, например /users/ 1/role/2. Это был бы самый RESTful способ сделать это.
В противном случае, я думаю, вы можете просто передать идентификатор пользователя как часть параметров запроса? Что-то вроде
$http.delete('/roles/' + roleid, {params: {userId: userID}}).then...
Ответ 2
Мое предложение:
$http({
method: 'DELETE',
url: '/roles/' + roleid,
data: {
user: userId
},
headers: {
'Content-type': 'application/json;charset=utf-8'
}
})
.then(function(response) {
console.log(response.data);
}, function(rejection) {
console.log(rejection.data);
});
Ответ 3
У многих-многих отношений обычно есть таблица ссылок. Рассмотрите эту "ссылку" как самостоятельную сущность и дайте ей уникальный идентификатор, а затем отправьте этот идентификатор в запрос удаления.
У вас будет URL-адрес ресурса REST, например /user/role, для обработки операций в объекте "ссылка" пользователя.
Ответ 4
Я бы предложил прочитать этот URL-адрес
http://docs.angularjs.org/api/ngResource/service/$resource
и переоцените, как вы вызываете свой метод удаления своих ресурсов.
в идеале вы хотели бы вызвать удаление самого элемента ресурса и не передавать идентификатор ресурса в метод удаления catch all
однако $http.delete принимает объект конфигурации, который содержит как свойства url, так и данные, вы могли либо обработать строку запроса, либо передать объект/строку в данные
может быть что-то в этом роде
$http.delete('/roles/'+roleid, {data: input});
Ответ 5
$http.delete
метод не принимает тело запроса.
Вы можете попробовать это обходное решение:
$http( angular.merge({}, config || {}, {
method : 'delete',
url : _url,
data : _data
}));
где в config
вы можете передавать данные конфигурации, такие как заголовки и т.д.