Angulars $ http.post理由

时间:2012-12-23 13:40:23

标签: javascript jquery angularjs

可比的jQuery函数

$.post("/example/handler", {foo: 1, bar: 2});

将使用帖子参数foo=1&bar=2创建请求。而

$http.post("/example/handler", {foo : 1, bar: 2});

似乎向正文POST而不是{"foo":1,"bar":2}版本发送了form-uriencoded个请求。为了得到我认为的预期行为,我需要做一些像

这样的事情
myModule.config(function ($httpProvider) {
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
    $httpProvider.defaults.transformRequest = function(data){
        return _.map(data, function (val, k) { return encodeURI(k) + "=" + encodeURI(val); }).join("&");
    }
});

在模块配置中。

任何人都可以解释$http.post参数处理背后的基本原理吗?是否存在我想要Angulars的默认行为或者我没有看到的隐藏优势的情况?

2 个答案:

答案 0 :(得分:2)

我不太熟悉HTTP协议,但是不是通常用于发送内容的POST请求,而不是参数?通常,我认为GET与参数一起使用。

我认为你应该能够在POST请求中添加一个配置对象,并指定params属性:

  

params - {Object。} - 将转向的字符串或对象的映射?url后的key1 = value1& key2 = value2。如果该值不是字符串,则它将是JSONified。

所以也许这样的事情会起作用:

$http.post("/example/handler", {}, {params: {foo: 1, bar: 2} })

(上面的代码片段未经测试......我不确定语法是否正确。)

答案 1 :(得分:0)

我想你回答了自己的问题。将JS对象转换为表单编码需要工作并且对于更复杂的结构变得棘手,而将JS对象转换为JSON则是微不足道的,因此默认情况下。您使用哪种后端在接受JSON编码时遇到问题?