我正在尝试对服务器进行HTTP POST。
我必须发送的数据是一个json对象。
问题是,角度中的$ http.post会覆盖带有选项的方法。
我可以进行此配置
.config(['$httpProvider', function ($httpProvider) {
//Reset headers to avoid OPTIONS request (aka preflight)
$httpProvider.defaults.headers.common = {};
$httpProvider.defaults.headers.post = {};
$httpProvider.defaults.headers.put = {};
$httpProvider.defaults.headers.patch = {};
}])
并从选项更改为POST,但我无法将内容类型设置为" application / json",而我正在获得" 415不支持的媒体类型"
谢谢
答案 0 :(得分:6)
$ http.post不会使用OPTIONS覆盖该方法。您似乎试图在不同的域中调用api而不是JS代码来自的域。这称为跨域。对于这种情况,浏览器使用OPTIONS执行预检请求以查看返回的标头。在后端响应中,您应该添加标题Access-Control-Allow-Origin: *
。当浏览器看到该标题时,他会执行实际的POST请求。
此处有更多详情:https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS
希望这有帮助!
答案 1 :(得分:1)
添加
$httpProvider.defaults.headers.post['Content-Type'] = 'application/json';
但请注意,这将全局设置Content-Type标头。
如果您需要为每次通话设置内容类型,则应使用$http.post
之类的
$http.post("/foo/bar", requestData, {
headers: { 'Content-Type': 'application/json'},
transformRequest: transform
}).success(function(responseData) {
//do stuff with response
});