如何将数据发布为表单数据而不是请求有效内容?

在下面的代码中,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?

下一篇: Accessing the web page's HTTP Headers in JavaScript