2014-01-24 196 views
0

我使用RESTful Web服務,並試圖從jQuery的AJAX調用 RESTAPI使用jQuery阿賈克斯不工作

@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); 
     } 
    }); 

在瀏覽器中,如果查詢它調用RESTful Web服務我嘗試它給我的網址{「response」:{「number」:200}}。但Ajax調用給出了一個錯誤,並在Web控制檯它顯示錯誤的JSON。

+0

這是什麼網址的http:// URL:端口/ DynamicReportsService/dynamicReports在您的Chrome控制檯中返回? –

+0

我一直在Mozilla中嘗試。並進入錯誤塊 – coder123

+0

它應該顯示在控制檯中的一些東西..同時這是什麼jsonp:「json.wrf」? –

回答

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