簡體   English   中英

控制器無法在ajax響應中的JSON對象中返回結果

[英]controller can't return result in JSON object in ajax response

我必須每秒調用一次並從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不會顯示任何警報。 但是如果我將in控制器的返回類型更改為String,那么它會在ajax響應中顯示正確的JSON字符串。

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

如果攜帶此文件,則無法從JSON字符串獲取數據。

請告訴我我的問題是什么。 還是有其他方法可以做到這一點?

你有json數組

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

然后使用索引訪問它:

data[0].sno

只需從getDashboardData1()返回一個字符串

然后在AJAX中成功回調:

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

請告訴我我的問題是什么。 還是有其他方法可以做到這一點?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM