Angular跨域post:在某些浏览器下会失败
Angular cross-domain post: fails using some browsers
我在Angular(1.4.0)中有一个跨域POST请求,在我删除Content-Type标头后,它可以使用Chrome(43+)和Firefox(37+)。
但在使用Safari或iPhone/iPad上的Safari/Chrome时失败。错误信息是:
Failed to load resource: Request header field Content-Type is notAccess-Control-Allow-Headers.
但是在日志中我可以看到:
[Log] original httpProvider defaults (app.js, line 6)
[Log] Content-Type: application/json;charset=utf-8 (app.js, line 7)
[Log] updated httpProvider defaults (app.js, line 13)
[Log] Content-Type: undefined (app.js, line 14)
[Error] Failed to load resource: Request header field Content-Type is not allowed by Access-Control-Allow-Headers. (search, line 0)
...
headers: Object
Accept: "application/json, text/plain, */*"
因此:报头中没有Content-Type也会出现错误信息。
有什么建议吗?
片段:
var app = angular.module('myApp', []);
app.config(['$httpProvider', function($httpProvider) {
console.log("original httpProvider defaults");
console.log("Content-Type:", $httpProvider.defaults.headers.post['Content-Type']);
//$httpProvider.defaults.useXDomain = true;
//delete $httpProvider.defaults.headers.common["X-Requested-With"];
delete $httpProvider.defaults.headers.post['Content-Type'];
console.log("updated httpProvider defaults");
console.log("Content-Type:", $httpProvider.defaults.headers.post['Content-Type']);
}]);
app.controller('testController', function($scope, $http, $sce) {
console.log("testController");
$scope.url = "http://.../v0/search";
$scope.data = { "query":"auto" };
$scope.testPost = function() {
$http.post($scope.url, $scope.data).
success(function(data, status, headers, config) {
console.log("success");
console.log(data, status, headers, config);
}).
error(function(data, status, headers, config) {
console.log("error");
console.log(data, status, headers, config);
});
}
});
很抱歉打扰你,毕竟是服务器问题。API提供商已经更新了他们的API,现在可以工作了。
我仍然有点好奇,是什么导致服务器对不同浏览器的相同请求进行不同的处理,当日志记录告诉我没有设置头字段时,我真的不理解错误信息。但现在它起作用了,这才是最重要的。
相关文章:
- jQuery Ajax在Android平板电脑浏览器上失败
- 有没有办法阻止失败的HTTP请求在浏览器控制台中显示为错误
- 加载远程 JavaScript 文件失败是否会停止在任何浏览器中执行 JavaScript
- AngularJS:cookie 在浏览器刷新时失败
- 浏览器在请求失败时自行发出请求,当互联网重新连接时
- 绑定事件在Chrome上失败,但在浏览器返回时在Firefox中正常
- Protractor+CucumberJS+Gulp Protractor=当测试失败时,浏览器不会关闭
- 在Android浏览器上检测到对getUserMedia的支持失败
- jquery.ajax代码,在firefox中工作,但在所有其他浏览器中都失败
- Firefox和IE再次失败帮助我的代码跨浏览器?JQuery自动滚动
- 有些奇怪的javascript代码适用于所有主流浏览器,但使用phantomjs/qunit失败了
- 循环使用Ajax的函数.仅在IE中失败.其他浏览器都能正常工作
- 重定向除Chrome外所有浏览器中的javascript失败
- 来自跨域的图像在HTML中显示良好,但ajax从浏览器控制台调用相同的图像失败
- Angularjs$http获取失败,但在邮递员和浏览器中请求成功
- Try Catch在普通Android浏览器上失败
- jQuery ajax只在chrome浏览器失败
- 为什么我的ajax呼叫在谷歌浏览器失败
- 第二个Javascript表单POST在Chrome浏览器失败,在IE和FF工作
- HTML5上传通过XHR在Chrome浏览器失败