如何将变量从Java传递到javascript?

时间:2019-05-29 15:10:41

标签: javascript java

我在javascript jsp中有一个编辑功能,我需要将一本书的ID传递给java方法。在java方法中,我使用该ID从数据库中搜索表格并查找书籍的类型。 (类别) 然后,我需要回到jsp(javascript函数)并将该类型的书加载到字段中。

JSP中的JAVASCRIPT:

<script>
function edit(id) {
        jQuery.ajax({
            type: "GET",
            url: "getId",
            data: "id= " + id,
            datatype: "text"
        });
        var type =<%= ((String)request.getAttribute("myType"))%> ;
        console.log("type is " + type);
    }
</script>

JAVA:

    @RequestMapping("/getId")
    public void getId(
            @RequestParam int id,HttpServletRequest request) {
        idBook = id;
        System.out.println("get id book "+id);
        String type= BookDao.getTypeCategory(id);
        request.setAttribute("myType",type);
        System.out.println("request attribute"+request.getAttribute("myType"));
    }

这样做,来自javascript的类型为null ...如何更改? (来自Java的类型保存了所需的值)。 BookDao.getTypeCategory使用该ID来搜索数据库表并检索所需的类型。

1 个答案:

答案 0 :(得分:3)

您需要使用@ResponseBody,并且在ajax内部使用success回调函数来获取ajax成功的价值。

DataTypeOfReturn是您要返回的数据类型,可以是int/String

function edit(id) {
  jQuery.ajax({
    type: "GET",
    url: "getId",
    data: "id= " + id,
    datatype: "text",
    success: function(data) {
      console.log(data)
    }
  });
  var type = <%= ((String)request.getAttribute("myType"))%>;
  console.log("type is " + type);
}



@RequestMapping("/getId")
public @ResponseBody DataTypeOfReturn getId(
  @RequestParam int id, HttpServletRequest request) {
  int idBook = id; // add data type here to avoid java error
  System.out.println("get id book " + id);
  String type = BookDao.getTypeCategory(id);
  request.setAttribute("myType", type);
  System.out.println("request attribute" + request.getAttribute("myType"));
  return theValue; // value which you want to return
}