【问题标题】:controller can't return result in JSON object in ajax response控制器无法在 ajax 响应中返回 JSON 对象的结果
【发布时间】:2017-04-08 06:33:32
【问题描述】:

我必须每秒调用并从 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 不会显示任何警报。但是如果我将控制器中的返回类型更改为字符串,那么它会在 ajax 响应中显示正确的 JSON 字符串。

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

如果我携带这个,那么我无法从 JSON 字符串中获取数据。

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

【问题讨论】:

  • 在将方法的返回类型更改为字符串后,我没有得到您所面临的问题?如果您想从响应中获取价值,只需使用 data.sno
  • 如果我将 JSON 数据作为字符串从控制器返回到 ajax 响应,则 alert(data); 它显示 [{"sno":"3618","data":"01","datetime":"2017-04-05 12:33:26.266"}] 现在如果我要获取特定数据,例如 alert(data.sno);,那么它显示 undefine。
  • 我对 contentType: "application/json", dataType: "json", 存在语法问题有疑问。那是双引号或单引号。如果我错了,你能纠正我吗..
  • 你有json数组,试试data[0].sno
  • users 变量在哪里定义?

标签: javascript java ajax jsp spring-mvc


【解决方案1】:

你有json数组

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

然后使用索引访问它:

data[0].sno

【讨论】:

    【解决方案2】:

    简单地从getDashboardData1()返回一个字符串

    然后在AJAX成功回调:

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

    请告诉我我的问题是什么。或者有没有其他方法可以做 这个。?

    您不能访问 string 文字的属性,它必须是 json object

    【讨论】:

      猜你喜欢
      • 2014-06-02
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多