首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AngularJS -有没有办法让$http.post发送请求参数而不是JSON?

AngularJS -有没有办法让$http.post发送请求参数而不是JSON?
EN

Stack Overflow用户
提问于 2012-08-30 12:59:52
回答 10查看 213.5K关注 0票数 116

我有一些通过jQuery's post method发出AJAX POST请求的旧代码,如下所示:

代码语言:javascript
复制
$.post("/foo/bar", requestData,
    function(responseData)
    {
        //do stuff with response
    }

requestData只是一个带有一些基本字符串属性的javascript对象。

我正在将我们的东西转移到使用Angular的过程中,我想用$http.post替换这个调用。我想出了以下几点:

代码语言:javascript
复制
$http.post("/foo/bar", requestData).success(
    function(responseData) {
        //do stuff with response
    }
});

当我这样做的时候,我从服务器得到了一个500错误响应。使用Firebug时,我发现这会像这样发送请求正文:

代码语言:javascript
复制
{"param1":"value1","param2":"value2","param3":"value3"}

成功的jQuery $.post会像这样发送正文:

代码语言:javascript
复制
param1=value1&param2=value2&param3=value3

我遇到的端点需要的是请求参数,而不是JSON。所以,我的问题是,有没有办法告诉$http.post将javascript对象作为请求参数发送,而不是JSON?是的,我知道我可以自己从对象构造字符串,但我想知道Angular是否提供了开箱即用的功能。

EN

回答 10

Stack Overflow用户

发布于 2013-04-24 01:27:34

使用jQuery的$.param函数在requestData中序列化JSON数据。

简而言之,使用与您的代码类似的代码:

代码语言:javascript
复制
$http.post("/foo/bar",
$.param(requestData),
{
    headers:
    {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    }
}
).success(
    function(responseData) {
        //do stuff with response
    }
});

要使用它,您必须在页面中与AngularJS一起包含jQuery。

票数 15
EN

Stack Overflow用户

发布于 2015-12-24 03:31:32

注意,从Angular 1.4开始,您可以不使用jQuery来序列化表单数据。

在app.js中:

代码语言:javascript
复制
module.run(function($http, $httpParamSerializerJQLike) {
  $http.defaults.transformRequest.unshift($httpParamSerializerJQLike);
});

然后在你的控制器中:

代码语言:javascript
复制
$http({
    method: 'POST',
    url: myUrl',
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: myData
});
票数 7
EN

Stack Overflow用户

发布于 2013-05-02 12:25:18

我在设置自定义http身份验证时也有问题,因为$resource缓存了请求。

要使其正常工作,您必须通过执行以下操作覆盖现有的标头

代码语言:javascript
复制
var transformRequest = function(data, headersGetter){
  var headers = headersGetter();
  headers['Authorization'] = 'WSSE profile="UsernameToken"';
  headers['X-WSSE'] = 'UsernameToken ' + nonce
  headers['Content-Type'] = 'application/json';
};

return $resource(
  url,
    {
    },
    {
      query: {
        method: 'POST',
        url: apiURL + '/profile',
        transformRequest: transformRequest,
        params: {userId: '@userId'}
      },
    }
);

我希望我能帮助到别人。我花了3天才弄明白这个问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12190166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档