angularjs$http post不使用Chrome浏览器
我正试图使用angularjs将一个对象发布到我的rest服务。 不幸的是,它与谷歌的Chrome浏览器不兼容。Firefox和Internet Explorer工作得非常好强> 有人知道问题出在哪里吗 这是我的前端呼叫:angularjs$http post不使用Chrome浏览器,angularjs,google-chrome,http,post,Angularjs,Google Chrome,Http,Post,我正试图使用angularjs将一个对象发布到我的rest服务。 不幸的是,它与谷歌的Chrome浏览器不兼容。Firefox和Internet Explorer工作得非常好 有人知道问题出在哪里吗 这是我的前端呼叫: $scope.saveAssignment = function (cap, aId, wId, hId) { //all the parameters are strings var postData = { assignmentId: aId
$scope.saveAssignment = function (cap, aId, wId, hId) {
//all the parameters are strings
var postData = {
assignmentId: aId,
status: "CLOSED",
startDate: new Date(),
endDate: new Date(),
captionText: cap,
workerId: wId,
segment_Id: hId
};
var header ={
'Content-Type': 'application/json; charset=utf-8'
};
$http.post("https://localhost:8443/rest/v1/saveAssignment", postData, header)
.success(function (data, status, headers, config) {
console.log("IN SAVE ASSIGNMENTS - SUCCESS");
console.log(status);
})
.error(function (data, status, headers, config) {
console.log("ERROR!");
//As a response I get data = '' and status = 0
})
}
如果我部署它(无论是否独立于localhost),我都会遇到同样的问题
在服务器端(JPA),我通过以下方式接受呼叫:
@Path("saveAssignment")
public class SaveAssignment{
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response saveAss(String assJson) {
System.out.println("TEST");
......
......
}
但即使打印语句“TEST”也无法执行
更新
看来这是CORS的问题。。。
Chrome只发送一个选项请求,而不是一个POST。。。
你知道如何解决这个问题吗?
我已经试过了
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
但是没有成功…:(
更新2
不幸的是,我仍然无法让它工作。所以我做了一个变通办法,有意识地排除使用Chrome浏览器的用户在我的页面上发表这篇文章(即查看整个页面)…(我在亚马逊的Mechanical Turk上用过它,所以没有那么严重)。但这并不是解决来源问题的办法…:-(
为了排除使用谷歌Chrome浏览器的用户,我添加了以下内容:
$scope.chrome;
$scope.setIsChrome = function(){
var chromium = window.chrome;
var vendorName = window.navigator.vendor;
if(chromium !== null && vendorName === "Google Inc.") {
$scope.chrome = true;
} else {
$scope.chrome = false;
}
}
您必须额外检查供应商名称,因为Opera浏览器返回“window.chrome”的true另外…您的angular应用程序是否通过相同的HTTPS服务器提供服务?如果
localhost:8433
具有自签名或不匹配的证书,则这可能是您的问题,因为在这种情况下,Chrome通常会显示安全异常页面
只需打开任何以https://localhost:8443/
作为正常页面,然后确认安全异常。这应该会有所帮助
更新:
如果您使用iframe,那么嵌入的页面可能会受到沙盒的限制:chrome开发工具中的网络选项卡会说什么?不太多…状态:(已取消)类型:application/json;charset=UTF-8------------------------------------------[…]Accept:application/json,text/plain,/Content-Type:application/json;charset=UTF-8来源:用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,像Gecko)Chrome/35.0.1916.153 Safari/537.36请求Payloadview源[…]您可以尝试从帖子中删除“https:”吗?只需从“//localhost:8443/rest”开始.不幸的是,该页面依赖于https,因为它作为iframe嵌入在Amazon Mechanical Turk中,而MTurk要求该页面为https…您对此有解决方案/解决方法吗?从很长一段时间来看,这很好,但这不是问题,自签名证书正常工作……正如我在部署t时所说的应用程序,行为是相同的…:/angular应用程序是否通过与AJAX相同的HTTPS服务器提供服务?