我正在尝试使用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 ...
答案 0 :(得分:0)
您的角度应用是否通过相同的HTTPS服务器提供服务?如果localhost:8433
具有自签名或不匹配的证书,则可能是您的问题,因为在这种情况下Chrome通常会显示安全例外页面。
只需打开以https://localhost:8443/
开头的任何网址作为普通网页,然后确认安全例外。这应该会有所帮助。
更新
如果您使用iframe,那么嵌入式页面可能受到沙盒的限制:http://msdn.microsoft.com/en-us/hh563496.aspx