我想构建一个能够发回JSONP
我的服务如下所示
@GET
@Path("user/{id}")
@Produces({"application/javascript", MediaType.APPLICATION_JSON})
@JSONP(callback= "eval",queryParam = "callback")
public Response getUser(@PathParam("id") int id, @Context HttpHeaders headers
) {
//for (MediaType mediaType : headers.getAcceptableMediaTypes()) {
// System.out.println(mediaType);
//}
User u = UserDao.instance.getModel().get(Integer.toString(id));
Response res = Response.status(Response.Status.OK).entity(u).build();
return res;
}
是不是?还是错的?
当我使用Jquery访问服务时(我是jquery atm的新手)我收到错误,以下是我用来访问服务的代码。
jQuery.ajax({
type: "GET",
url: "http://localhost:8084/simple-service/webapi/myresource/user/1",
dataType: "jsonp",
success: function(results) {
alert("Success!");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error");
}
});
我在这里做错了吗?我有两个不同的错误消息:
{"id":"1","name":"Brittni","surname":"North"}
看起来好像缺少回调功能的名称? :S
你能帮我发现我做错了什么吗? :D谢谢你的帮助!
答案 0 :(得分:0)
如果您希望在不在同一个来源时访问该服务,则以下是该服务的代码:
在响应上设置标题,另外添加@Jsonp
注释。
@GET
@Path("user/{id}")
@Produces({"application/javascript", MediaType.APPLICATION_JSON})
@JSONP(callback= JSONP.DEFAULT_CALLBACK,queryParam = JSONP.DEFAULT_QUERY)
public Response getUser(@PathParam("id") int id, @Context HttpHeaders headers
) {
User u = UserDao.instance.getModel().get(Integer.toString(id));
Response res = Response.status(Response.Status.OK).entity(u).build();
res.getHeaders().add("Access-Control-Allow-Origin", "*");
res.getHeaders().add("Access-Control-Allow-Headers",
"origin, content-type, accept, authorization");
res.getHeaders().add("Access-Control-Allow-Credentials",
"true");
res.getHeaders().add("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD");
return res;
}
对于跨域调用,请使用ajax请求中的内置标志。其他字段(如dataType)将由jquery以智能方式自动填充。
jQuery.ajax({
type: "GET",
url: "http://localhost:8084/simple-service/webapi/myresource/user/" + e.data.id,
crossDomain: true,
success: function(results) {
console.log("Success!");
$this.trigger("populate", [results]);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error");
}
});