使用jQuery调用Restful Web服务ajax不起作用

时间:2014-01-24 13:10:16

标签: java jquery rest

我正在使用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。

1 个答案:

答案 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 + ");";