小编典典

如何在没有 jQuery 的情况下使用 $http 发布 urlencoded 表单数据?

all

我是 AngularJS 的新手,一开始,我想只使用 AngularJS 开发一个新的应用程序。

我正在尝试使用$http我的 Angular 应用程序对服务器端进行 AJAX 调用。

为了发送参数,我尝试了以下方法:

$http({
    method: "post",
    url: URL,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: $.param({username: $scope.userName, password: $scope.password})
}).success(function(result){
    console.log(result);
});

这是有效的,但它也在$.param. 为了消除对 jQuery 的依赖,我尝试了:

data: {username: $scope.userName, password: $scope.password}

但这似乎失败了。然后我尝试了params

params: {username: $scope.userName, password: $scope.password}

但这似乎也失败了。然后我尝试了JSON.stringify

data: JSON.stringify({username: $scope.userName, password: $scope.password})

我找到了这些可能的答案,但没有成功。难道我做错了什么?我敢肯定,AngularJS 会提供这个功能,但是怎么做呢?


阅读 83

收藏
2022-03-10

共1个答案

小编典典

我认为您需要做的是将数据从对象转换为 JSON 字符串,而不是转换为 url 参数。

默认情况下,$http 服务将通过将数据序列化为 JSON,然后使用内容类型“application/json”发布它来转换传出请求。当我们想将值作为 FORM 帖子发布时,我们需要更改序列化算法并使用 content-type 发布数据,“application/x-www-form-urlencoded”。

$http({
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    transformRequest: function(obj) {
        var str = [];
        for(var p in obj)
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        return str.join("&");
    },
    data: {username: $scope.userName, password: $scope.password}
}).then(function () {});
2022-03-10