如何使用Grails Controller中的JSON填充选择框

时间:2016-10-20 23:42:41

标签: javascript json grails

我必须使用存储在我的数据库中的所有可用学科填充一个选择框。

所以,在DisciplineController中我创建了一个这样的动作:

def getDisciplinesJson() {

def discList = Discipline.getAll()
return discList as JSON

}

这是获得JSON学科的正确方法吗?我如何调用此操作,并使用Javascript填充选择框,如下所示:

<select id=disc-select> </select>

此选择框出现在其他页面中,例如学生创建。

3 个答案:

答案 0 :(得分:2)

有很多方法。例如,使用JQuery

<script>
  function loadDisciplines() {
    $.ajax({
      url: "${createLink(controller: 'DisciplineController', action: 'getDisciplinesJson')}",
      success: function (data) {
        //...
// Parse JSON, create select box etc..
      }
    });
  }
</script>

并更改&#34;将discList作为JSON&#34; to&#34;将discList渲染为JSON&#34;

您还可以使用代码创建模板:

<select id=disc-select> 
<g:each in="${discList}" var="disc">
<option value="${disc?.id}">${disc?.name}</option>
</g:each>
</select>

从控制器已经渲染的模板返回:

render template:"pathToTemplate/thisTEmplate", model:[discList:discList]

然后在loadDisciplines()成功块中,您只需要输入:

$('#disciplines-div').html(data);

其中#critlines-div是

<div id="disciplines-div"></div>

答案 1 :(得分:1)

如果你不介意改变选择数据列表,那么dataList HTML5更容易支持数据列表,你可以找到example here:并在这里显示:

<input type=text list=browsers>
<datalist id=browsers>
  <option value="Firefox">
  <option value="IE">
  <option value="Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>

如果您希望自动完成使用数据列表,请查看boselecta。我已将其用于自动完成,您可以找到example here。将json解析为数据列表还有一些复杂性,但它都在该页面内。

答案 2 :(得分:0)

我知道您的问题是'如何使用Grails Controller中的JSON填充选择框',但查看您的示例。为什么需要用JSON填充它?

在这种情况下,<g:select>标记可能是一种更简单的方法。

<g:select id="disc-select" from="${my.package.Discipline.list()}" name="myparam"/>

这假设您正在使用GSP