可比的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的默认行为或者我没有看到的隐藏优势的情况?
答案 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编码时遇到问题?