我在webservices上做了一个例子,我想使用jsonp
回调函数返回json。
我在服务器端实现了弹簧
这是我的代码
$("#button5").click(function() {
$.getJSON("....webServices/rest/hello/jsonp?callback=?",
function(result){
//response data are now in the result variable
alert("jsonp");//NOT printing
});
});
这是我的服务器端代码
@GET
@Path("/jsonp")
@Produces(MediaType.APPLICATION_JSON)
public Person sayJsonpHello()
{
Person person = new Person();
person.setID(1);
person.setName("person1");
System.out.println("jsonp hello");
return person;
}
当我在 chrome 上执行其余客户端中的网址时,它显示"unexpected token c"
我能够返回json而不是jsonp ...这就是回调函数无法正常工作。 我已经浏览了stackoverflow中的其他链接,但它有助于。
我是否需要在服务器端设置任何配置。
这是我试过的另一个选择
$("#button5").click(function () {
alert("button5");
$.getJSON("....../webServices/rest/hello/jsonp?callback=callbackFunction", function (result) {
alert("jsonp"); //NOT printing
}).fail(function() {
console.log(arguments);
});
});
function callbackFunction()
{
alert("call back function");
}
The corresponding code on server-side
@GET
@Path("/jsonp")
@Produces(MediaType.APPLICATION_JSON)
public String sayJsonpHello()
{
Person person = new Person();
person.setID(1);
person.setName("shalini");
System.out.println("jsonp hello");
return "callbackFunction("+person+")";
}
更新 - 回答我的问题(在我解决问题后发帖) 我的错误是 - 应该使用@Produces(“application / x-javascript”)而不是@Produces(MediaType.APPLICATION_JSON)。 reurn类型应该是JSONWithPadding而不是string
服务器端
@GET
@Path("/jsonp")
@Produces("application/x-javascript")
public JSONWithPadding sayJsonpHello()
{
Person person = new Person();
person.setID(1);
person.setName("google");
System.out.println("jsonp hello");
return new JSONWithPadding(person,"callbackFunction");
}
UI
$("#button5").click(function() {
var url = '...../webServices/rest/hello/jsonp?callback=callbackFunction';
$.ajax({
type : "GET",
url : url,
data : {},
async : true,
contentType : "application/json; charset=utf-8",
dataType : "jsonp",
success : function(data) {
alert("success");
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert('error' + errorThrown);
},
});
});
回调函数应该是可见的。这是照顾范围。
<script type="text/javascript">
function callbackFunction()
{
alert("call back function");
}
</script>