AngularJs Multipart $ http请求问题

时间:2013-12-04 00:34:12

标签: javascript ajax angularjs

出于某种原因,我无法从表单中获取[object Object]。我在这里使用的是hte方法: http://badwing.com/multipart-form-data-ajax-uploads-with-angularjs/#comment-431

我发送的JSON非常复杂(样本):

{
    "challenge_id": 262,
    "priority": "0",
    "cause_id": "29",
    "timestamp": "2013-11-29 12:06:01",
    "translations": {
        "en": {
            "name": "asdfgsfd",
            "description": "sdfghfs"
        }
    },
    "actions": {
        "1": {
            "type": "chek",
            "step": "1",
            "translations": {
                "en": {
                    "description": "adsfas"
                }
            }
        },
        "2": {
            "type": "chek",
            "step": "2",
            "translations": {
                "en": {
                    "description": "fsdgsd"
                }
            }
        }
    }
}

我的回答如下:

Content-Disposition: form-data; name="challenge_json"

[object Object]

我的请求如下:

        return $http.post( REQUEST_URL + '/ENDPOINT', {challenge_json:data}, {
        transformRequest: function(data) {
            console.log(data);
            var fd = new FormData();
            angular.forEach(data, function(value, key) {
                fd.append(key, value);
            });
            console.log(fd);
            return fd;
        }

我使用httpProvider配置更改修改标头。但是我已经尝试过这样做,并得到了相同的结果。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您似乎接近解决方案,但需要取消设置内容类型'传递给$ http的选项中的标头,以便xmlhttprequest对象在其send方法上获得formdata时可以自动添加它。

https://groups.google.com/d/topic/angular/MBf8qvBpuVE/discussion

在这里看一个游乐场http://jsfiddle.net/Lv1n55db/1/

(直接提供FormData对象和无操作转换,或者你提供普通数据对象的方式并将其转换为transformRequest中的FormData没有显着区别,关键是在header选项中)

headers:{'Content-Type':undefined},

它可能因不同的浏览器和不同的angularjs版本而异。 一个更加确定和稳定的方法,至少如果你不需要文件字段等,可能是不使用本机FormData,而是实现序列化来自己串起来,就像FormData polyfill那样。