angularjs $ http帖子无法使用Chrome浏览器

时间:2014-07-04 16:27:27

标签: angularjs google-chrome http post

我正在尝试使用angularjs将对象发布到我的休息服务。 很遗憾,无法使用Google的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");
......
......
}

但即使是print语句“TEST”也没有被执行......

更新

看起来它必须是一个CORS问题...... Chrome只发送一个OPTION请求而不是POST ... 想法如何解决这个问题? 我已经尝试了

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

但没有成功...... :(

更新2

不幸的是,我仍然无法让它发挥作用。所以我做了一个解决方法,有意识地用Chrome浏览器排除用户在我的页面上做这个帖子(即看到整个页面)......(我把它用于亚马逊的机械土耳其人,所以它并不那么严重)。但它不是原产地问题的解决方案......: - (

要使用Google的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 ...

1 个答案:

答案 0 :(得分:0)

您的角度应用是否通过相同的HTTPS服务器提供服务?如果localhost:8433具有自签名或不匹配的证书,则可能是您的问题,因为在这种情况下Chrome通常会显示安全例外页面。

只需打开以https://localhost:8443/开头的任何网址作为普通网页,然后确认安全例外。这应该会有所帮助。

更新

如果您使用iframe,那么嵌入式页面可能受到沙盒的限制:http://msdn.microsoft.com/en-us/hh563496.aspx