【发布时间】:2013-08-13 07:31:53
【问题描述】:
如何使用 AngularJS 发送 POST 请求? JSON 部分是必需的,但文件不是。我已经根据其他博客文章尝试过这个,但它不起作用。我收到 Bad request 400 错误。
正确答案加200分
var test = {
description:"Test",
status: "REJECTED"
};
var fd = new FormData();
fd.append('data', angular.toJson(test));
return $http.post('/servers', fd, {
transformRequest: angular.identity,
headers: {
'Content-Type': undefined
}
});
【问题讨论】:
-
只是为了确保,您想在一个请求中同时发送编码文件 和 JSON 内容?你能澄清一下你想要得到的流程吗?
-
@Benjamin Gruenbaum:是的,这是正确的,所有在一个请求中。我创建了一个 Java Spring 后端,它采用必需的 JSON 部分和可选的文件部分。我有一个用户输入数据的表单,然后模型通过 angular.toJson(..) 转换为 Json,然后我想发布它。用户还可以选择以相同的形式上传文件。
-
嗯,这可能是一个小工作或很多什么,你必须支持哪些浏览器?
-
我不会关心古代浏览器。使用我的网页的人应该有一个 html5 浏览器。
-
FormData绝对是要走的路,你似乎已经完成了一半,你正在将 JSON 数据附加到表单而不是文件,你应该在你的文件上调用fd.append(或创建来自它的Blob)并发送。 (请参阅 FormData 上的 this tutorial,如果您对此有任何反馈,我也想听听 :))。一旦你设置了它,你仍然需要在 Spring 中支持 Multipart。这需要 goo.gl/iYguqz 。我也会使用普通的 XHR 而不是$http,老实说,较新版本的 Angular 可能解决了 Angular 在 AJAX 中使用 FormData 时遇到的一些旧问题。
标签: javascript angularjs