angularjs$http post不使用Chrome浏览器

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

我正试图使用angularjs将一个对象发布到我的rest服务。 不幸的是,它与谷歌的Chrome浏览器不兼容。Firefox和Internet Explorer工作得非常好

有人知道问题出在哪里吗

这是我的前端呼叫:

    $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服务器提供服务?