2017-04-08 30 views
0

我必須在每秒鐘內調用並從其他API中獲取數據。所以我用時間1秒調用這個方法。如下。控制器無法在Ajax響應中返回JSON對象的結果

var myVar = setInterval(function(){ getData1() }, 1000); 

以下是我的調用控制器的Javascript函數。

function getData1(){ 
    var url=CONTEXT_ROOT+"/login/getdashboarddata1"; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     contentType: "application/json", 
     dataType: "json", 
     data:{}, 
      success: function(data){ 
       alert(data);      

      }, 
     error: function(e){ 
      //alert(e); 
     } 
     }); 
} 

這是我的控制器代碼

@RequestMapping(value="/getdashboarddata1", method=RequestMethod.POST) 
    public JSONObject @ResponseBody getDashboardData1() throws JsonParseException, JsonMappingException, NullPointerException{ 

     RestTemplate restTemplate = new RestTemplate(); 
     String url = "http://localhost:8080/r_f22bc0ac1fe48bce/dataService/lastdata/"; 
     String user = restTemplate.getForObject(url, String.class); 

     System.out.println("user: "+user); 
     JSONObject obj = null; 
     try { 
      obj = new JSONObject(user); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return obj; 
    } 

如果我運行該程序,然後JSP不顯示任何警報。但如果我將控制器中的返回類型更改爲String,則它會在ajax響應中顯示正確的JSON字符串。

[{"sno":"3618","data":"01","datetime":"2017-04-05 12:33:26.266"}]

如果我隨身攜帶這一點,那麼我無法從JSON字符串中獲取數據。

請告訴我什麼是我的問題。或者有沒有其他方法可以做到這一點?

+0

在將方法的返回類型更改爲字符串後,我沒有得到您面臨的問題?如果你想從reaponse中獲得價值,只要使用data.sno – Ankit

+0

,如果我將JSON數據作爲字符串從控制器返回給ajax響應,那麼'alert(data);'它顯示'[{「sno」:「3618」 ,「data」:「01」,「datetime」:「2017-04-05 12:33:26.266」}]現在,如果我要獲取像alert(data.sno)這樣的特定數據,那麼它會顯示取消定義。 – Ashish

+0

我對'contentType:'application/json'有疑問, dataType:「json」,'有語法問題。這是雙引號或單引號。你能糾正我,如果我錯了.. – Ashish

回答

1

你有JSON數組

[{"sno":"3618","data":"01","datetime":"2017-04-05 12:33:26.266"}] 

使用索引然後訪問:

data[0].sno 
1

只需從getDashboardData1()

返回一個字符串,然後在AJAX成功回調:

JSON.parse(data)[0]['sno']; 

請告訴我什麼是我的問題。或者有沒有其他辦法可以做 這個。?

您不能訪問string文字的屬性,它必須是json object