繁体   English   中英

Angular $ resource服务以表单数据而不是请求有效载荷发送数据

[英]Angular $resource service send data in Form Data instead of Request Payload

我面对有角度的$ resource服务的问题。

我试图以不同的方式使用某些表单数据来创建REST API。

但是,每次我使用该API时,要么最终要么以QueryParams的形式发送数据,要么最终请求有效载荷。

我实际上需要将数据以编码形式发送。

我的代码如下所示:

var headers = {
            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
        };


var save = function (url, params, headers, successcb, successParams, errorcb, errorParams) {
            var promise = $resource(url, null, {
                upload: {
                    method: methodPost,
                    headers: headers
                }
            }).save({}, params).$promise;

            promise.then(function (response) {
                successcb(response.data, successParams);
            }, function (error) {
                errorcb(error, errorParams);
            });
        };

我已经附上了角度ajax请求的快照。

在此处输入图片说明

参考上面的图片,尽管我设置了x-www-form-urlencoded,但内容类型实际上是显示application / json。 因此,数据将在RequestPayload中而不是FormData中输出。

下面是jQuery ajax调用的另一幅图像。

在此处输入图片说明

在这里,您可以清楚地看到content-type是x-www-form-urlencoded,并且工作正常。

我的疑问是,$ resource没有发送适当的标头,因此数据以RequestPayload的形式发送。

有没有人遇到过这个问题?

任何帮助表示赞赏。

谢谢

您可以为此使用转换请求,如下所示。

var transform = function(data) {
        return $.param(data);
    }

    var headers = {
        'Content-Type' : 'application/x-www-form-urlencoded;charset=UTF-8'
    };

    var save = function(url, params, headers, successcb, successParams, errorcb, errorParams) {
        var promise = $resource(url, null, {
            upload : {
                method : methodPost,
                headers : headers,
                transformRequest : transform

            }
        }).save({}, params).$promise;

        promise.then(function(response) {
            successcb(response.data, successParams);
        }, function(error) {
            errorcb(error, errorParams);
        });
    };

这是由于$http服务$resoucetransformRequest方法所依赖,该方法始终将Content-Type标头设置为application/json

要纠正此问题,您需要禁用它或将其更改为使用将规格设置为所需功能的功能。

此处的好文章: http : //www.bennadel.com/blog/2615-posting-form-data-with-http-in-angularjs.htm

尝试:

var promise = $resource(url, null, {
    upload: {
        method: methodPost,
        headers: headers,
        transformRequest: []        
    },
}).save({}, params).$promise;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM