如何使用angularjs $ http.delete()请求发送数据?

时间:2014-02-26 22:52:06

标签: javascript angularjs laravel-4

我有一个资源'角色',与'用户'有很多关系。要管理“角色”,我需要将角色ID和用户ID发送到服务器,以便从正确的用户(不一定是登录用户)中删除角色

这是我的尝试,但根据docs,这是不可能的。我知道我可以在uri中发送两个id但是我的laravel后端会自动设置资源/ {resourceid}的资源路径,如果可能的话我想使用它。有没有办法做到这一点,我错过了?

var removeRole = function (roleid, userid) {
        var input =[];
        input.user = userid;

        $http.delete('/roles/' + roleid, input).success(function (data, status) {
            console.log(data);
        });
    };

6 个答案:

答案 0 :(得分:99)

您可以通过/ users / 1 / roles / 2等网址进行http DELETE。这将是最RESTful的方式。

否则我猜你可以将用户ID作为查询参数的一部分传递?像

这样的东西
$http.delete('/roles/' + roleid, {params: {userId: userID}}).then...

答案 1 :(得分:30)

我的建议:

$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);
});

答案 2 :(得分:5)

$http.delete方法不接受请求正文。 您可以尝试以下解决方法:

$http( angular.merge({}, config || {}, {
    method  : 'delete',
    url     : _url,
    data    : _data
}));

config中,您可以传递配置数据,如标题等。

答案 3 :(得分:3)

我建议阅读这个网址 http://docs.angularjs.org/api/ngResource/service/$resource

并重新评估您调用资源的删除方法的方式。

理想情况下,您希望调用资源项本身的删除,并且不将资源的id传递给catch all delete方法

但$ http.delete接受一个包含url和data属性的配置对象,你可以在那里制作查询字符串或将对象/字符串传递给数据

也许是这些方面的东西

$http.delete('/roles/'+roleid, {data: input});

答案 4 :(得分:2)

多对多的关系通常都有一个链接表。将此“链接”视为一个实体,并为其提供唯一ID,然后在删除请求中发送该ID。

您将拥有一个像/ user / role这样的REST资源URL来处理用户角色“链接”实体的操作。

答案 5 :(得分:0)

请尝试在httpoptions中传递参数,您可以按照下面的功能

deleteAction(url, data) {
    const authToken = sessionStorage.getItem('authtoken');
    const options = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        Authorization: 'Bearer ' + authToken,
      }),
      body: data,
    };
    return this.client.delete(url, options);
  }