Jsonp回调函数无法正常工作

时间:2015-01-09 09:17:49

标签: javascript jquery json jsonp

我在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>

0 个答案:

没有答案