我正在使用restful web服务并尝试从jquery ajax调用查询它 RESTAPI
@GET
@Path("/dynamicReports")
@Produces("application/json")
public String getDynamicFilters() {
String JsonStr=null;
JSONObject json=new JSONObject();
JSONObject tempjson=new JSONObject();
tempjson.put("number", 200);
json.put("response", tempjson);
JsonStr=json.toString();
System.out.println("inputJson : "+JsonStr);
Response.ok().header("Access-Control-Allow-Origin", "*").build();
return JsonStr;
}
我的jquery ajax电话
$.ajax({
type: "GET",
dataType:"jsonp",
crossDomain: true,
url: "http://url:port/DynamicReportsService/dynamicReports",
success: function(data1) {
console.log("response:" + data1);
},
error: function(jqXHR, textStatus, errorThrown) {
$("#loadingimageid").remove();
alert('generateReportFromMR:Error in processing!');
console.log(jqXHR);
}
});
在浏览器中,如果我尝试使用网址,则会向我提供{“响应”:{“number”:200}}。但是ajax调用给出了一个错误,在Web控制台中它显示错误的json。
答案 0 :(得分:1)
当您使用jsonp时,您需要使用浏览器发送的回调参数来提供响应。 将dataType设置为jsonp将允许jQuery自动添加额外的?callback =?到URL的末尾以指定回调。
基本上,调用期望结果为jsonp格式,但您只返回json格式。通过将json包含在回调参数中,确保返回jsonp而不是json。
检查控制台时,GET请求将包含类似
的内容?callback=jQuery152035532653917078266_4305276802416
现在您需要做的就是使用“jQuery152035532653917078266_4305276802416
”,您应该给出回复,
jQuery152035532653917078266_4305276802416({"response":{"number":200}});
所以在Java中,你可以使用request.getParameter(“callback”)然后用它来返回一个jsonp。
return request.getParameter("callback") + "(" + jsonStr + ");";
如果你想使用自定义回调,那么你的ajax请求应该是,
$.ajax({
type: "GET",
dataType:"jsonp",
crossDomain: true,
url: "http://url:port/DynamicReportsService/dynamicReports",
jsonpCallback: 'successCallback',
success: function(data1) {
console.log("response:" + data1);
},
error: function(jqXHR, textStatus, errorThrown) {
$("#loadingimageid").remove();
alert('generateReportFromMR:Error in processing!');
console.log(jqXHR);
}
});
回应是,
return "successCallback(" + jsonStr + ");";