2

可比较的 jQuery 函数

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

将使用 post 参数创建一个请求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 的默认行为或一些我没有看到的隐藏优势的情况?

4

2 回答 2

2

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

我认为您应该能够将配置对象添加到 POST 请求,并指定 params 属性:

params – {Object.} – 字符串或对象的映射,将在 url 之后转换为 ?key1=value1&key2=value2。如果值不是字符串,它将被 JSON 化。

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

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

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

于 2012-12-28T04:55:55.530 回答
0

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

于 2012-12-28T05:17:12.627 回答