Javascript 使用transformRequest将JSON转换为FormURL编码的数据

Javascript 使用transformRequest将JSON转换为FormURL编码的数据,javascript,angularjs,json,form-data,angular-factory,Javascript,Angularjs,Json,Form Data,Angular Factory,我试图将JSON数据转换为formURL编码的数据,但仍然无法工作 我的HTTP帖子 $http.post(API_ENDPOINT.login, credentials, { transformRequest: transformRequestAsFormPost }) 我的转换请求 'use strict'; define(['app-module'], function(app) { $app.info('transformRequest initialized'); r

我试图将JSON数据转换为formURL编码的数据,但仍然无法工作

我的HTTP帖子

$http.post(API_ENDPOINT.login, credentials, {
    transformRequest: transformRequestAsFormPost
 })
我的转换请求

'use strict';

define(['app-module'], function(app) {

$app.info('transformRequest initialized');

return app.factory('transformRequestAsFormPost', function() {

    function transformRequest(data, getHeaders) {
        var headers = getHeaders();
        headers["Content-Type"] = "application/x-www-form-urlencoded; charset=utf-8";
        return (serializeData(data));
    }

    function serializeData(data) {

        if (!angular.isObject(data)) {
            return ((data === null) ? "" : data.toString());
        }

        var buffer = [];

        for (var name in data) {
            if (!data.hasOwnProperty(name)) {
                continue;
            }

            var value = data[name];

            buffer.push(
                encodeURIComponent(name) +
                "=" +
                encodeURIComponent((value == null) ? "" : value)
            );

            console.log(buffer)

        }
        var source = buffer.join("&").replace(/%40/g, "@");
        return (source);
    }
    return (transformRequest);
});
});
我不知道我做错了什么。当我向其中传递任何JSON对象时,它将返回一个字符串。

由于,
transformRequest
函数无法再修改请求头。这种行为是非故意的,并且没有记录在案,因此更改应该只影响很少的应用程序

要发送包含
内容类型的POST请求:application/x-www-form-urlencoded

var config = {
  transformRequest: $httpParamSerializer,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
};

$http.post(API_ENDPOINT.login, credentials, config)
  .then(function(response) {
    console.log("SUCCESS");
}).catch(function(response) {
    console.log("ERROR");
    throw response;
});
由于,
transformRequest
函数无法再修改请求头。这种行为是非故意的,并且没有记录在案,因此更改应该只影响很少的应用程序

要发送包含
内容类型的POST请求:application/x-www-form-urlencoded

var config = {
  transformRequest: $httpParamSerializer,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
};

$http.post(API_ENDPOINT.login, credentials, config)
  .then(function(response) {
    console.log("SUCCESS");
}).catch(function(response) {
    console.log("ERROR");
    throw response;
});

谢谢,他们应该记录下来。我搜索了几个小时。谢谢,他们应该记录下来的。我找了好几个小时。