控制器无法在ajax响应中返回JSON对象的结果

时间:2017-04-08 06:33:32

标签: javascript java ajax jsp spring-mvc

我必须每秒调用并从rest API获取数据。所以我用时间1秒调用方法。如下。

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字符串中获取数据。

请告诉我我的问题是什么。或者还有其他方法可以做到这一点。

2 个答案:

答案 0 :(得分:1)

你有json数组

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

然后使用索引访问它:

data[0].sno

答案 1 :(得分:1)

只需从getDashboardData1()

返回一个字符串

然后在AJAX成功回调:

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

请告诉我我的问题是什么。或者还有其他办法吗?   此。?

您无法访问string字面值的属性,它必须是json object