我面臨着與跨域PUT通話的問題,我已經允許訪問控制允許來源從服務器端工作,把仍沒有關係沒有工作。跨域PUT調用不會訪問控制允許來源
@PUT
@Path("/getresponse/{caller}")
@Produces({MediaType.APPLICATION_JSON})
public Response getResponseData(@PathParam("caller") String caller ,@QueryParam("ticket")String ticket ,@FormParam("formParam") String data){
ResponseBuilder resp;
System.out.println("name of caller is -> "+ caller);
System.out.println("query param ticket -> "+ ticket);
System.out.println("form param data->" + data);
Employee emp = new Employee();
emp.setAge(23);
emp.setName("data");
Gson gson = new Gson();
String responseJson = gson.toJson(emp);
resp=Response.ok(responseJson);//header("Access-Control-Allow-Origin", "*")
resp.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS");
return resp.build();
}
每當我調用它從jquery的AJAX方法,它說 響應預檢請求未通過訪問控制檢查:否「訪問控制允許來源」標題存在於所請求的資源
我有以上服務的,但與POST簽名時,我把它叫做沒有任何問題 郵政服務代碼調用服務,服務相同的副本
@POST
@Path("/getresponses/{caller}")
@Produces({MediaType.APPLICATION_JSON})
public Response getResponseData1(@PathParam("caller") String caller ,@QueryParam("ticket")String ticket ,@FormParam("formParam") String data){
ResponseBuilder resp;
System.out.println("name of caller is -> "+ caller);
System.out.println("query param ticket -> "+ ticket);
System.out.println("form param data->" + data);
Employee emp = new Employee();
emp.setAge(23);
emp.setName("data");
Gson gson = new Gson();
String responseJson = gson.toJson(emp);
resp=Response.ok(responseJson);//header("Access-Control-Allow-Origin", "*")
resp.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST");
return resp.build();
}
我的客戶端代碼是
$(document).ready(function(){
// for post service
$('#sendcall').on('click',function(e){
var dataTosend ="formParam=data to send";
$.ajax({
url: 'http://someip:8099/Jqgrid/rest/getdata/getresponses/data?ticket=tick',
contentType : 'application/x-www-form-urlencoded',
data :dataTosend,
type: 'POST',
success: function(data){
alert(data);
}
});
});
//for PUT service
$('#sendcall2').on('click',function(e){
var datatosend ="formParam=data to send";
$.ajax({
url: 'http://someip:8099/Jqgrid/rest/getdata/getresponse/aliahsan?ticket=tick',
contentType : 'application/x-www-form-urlencoded',
data :datatosend,
type: 'PUT',
crossDomain:true,
beforeSend: function (xhr) {
console.log('header added');
},
success: function(data){
alert(data);
}
});
});
});
請幫我在這方面爲什麼PUT不能使用這個。 任何幫助將不勝感激
不要在方法中添加CORS標頭。 [使用過濾器](http://stackoverflow.com/a/28067653/2587435) –
爲什麼在過程中使用過濾器但不使用方法中的CORS @peeskillet – Ali
CORS的工作原理是,首先有一個預檢請求,它是OPTIONS請求(在實際請求之前),嘗試獲取CORS頭文件。所以方法中的頭文件什麼都沒有。 –