如何将数据发布为表单数据而不是请求有效内容?
在下面的代码中,AngularJS $http
方法调用URL,并将xsrf对象提交为“Request Payload”(如Chrome调试器网络选项卡中所述)。 jQuery $.ajax
方法执行相同的调用,但将xsrf作为“表单数据”提交。
我如何让AngularJS将xsrf作为表单数据提交而不是请求有效载荷?
var url = 'http://somewhere.com/';
var xsrf = {fkey: 'xsrf key'};
$http({
method: 'POST',
url: url,
data: xsrf
}).success(function () {});
$.ajax({
type: 'POST',
url: url,
data: xsrf,
dataType: 'json',
success: function() {}
});
需要将以下行添加到传递的$ http对象中:
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
传递的数据应转换为URL编码的字符串:
> $.param({fkey: "key"})
'fkey=key'
所以你有这样的东西:
$http({
method: 'POST',
url: url,
data: $.param({fkey: "key"}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
来自:https://groups.google.com/forum/#!msg/angular/5nAedJ1LyO0/4Vj_72EZcDsJ
如果你不想在解决方案中使用jQuery,你可以试试这个。 从这里获得的解决方案https://stackoverflow.com/a/1714899/1784301
$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: xsrf
}).success(function () {});
围绕这个问题的持续困惑激励我写一篇关于它的博客文章。 我在这篇文章中提出的解决方案比您当前评分最高的解决方案要好,因为它不限制您为$ http服务调用设置数据对象; 即用我的解决方案,您可以简单地继续将实际的数据对象传递给$ http.post()等,并仍然达到期望的结果。
此外,评分最高的答案依赖于在$ .param()函数的页面中包含完整的jQuery,而我的解决方案是jQuery不可知的,纯粹的AngularJS就绪。
http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/
希望这可以帮助。
链接地址: http://www.djcxy.com/p/41079.html上一篇: How can I post data as form data instead of a request payload?