使用 Grails 的简单 AJAX 示例

Simple AJAX example with Grails

我是 Grails 的新手,我正在尝试了解 AJAX 在 Grails 中的工作原理。为此,我尝试修改 here 中的乘法 AJAX 示例,以便我的应用程序在页面上显示带有 AJAX 的输入字符串。 (澄清一下:用户输入例如 "foo",页面应在搜索字段下显示 "foo")

到目前为止,这是我的代码:

我的 index.gsp 模板包含一个输入表单并显示以以下形式键入的字符串:

<!doctype html>
<html>
<head>
</head>
<body>    
<div id="search">
    <g:render template="searchForm"/>
</div>
<div id="results">
    <g:render template="searchResultForm"/>
</div>
</body>
</html>

我的 _searchForm.gsp 包含搜索表单的模板:

<g:form>
    <label for="suchen"></label><g:textField name="suchen"/>
    <g:submitToRemote url="[controller:'search', action:'search']" update="results" value="Suchen"/>
</g:form>

我的 _searchResultForm.gsp 模板将显示所有结果(在我的例子中只是搜索字符串)

${results}

我的SearchController里面应该得到搜索字符串和return相同的字符串:

class SearchController {

    ...

    def search(String s) {
        return s
    }
}

我的问题是,在我将内容写入输入表单并按下发送按钮后,没有任何反应。没有错误,但它也不会在输入表单下显示输入字符串。

你可能想知道为什么我要用 AJAX 来做这个:我的目的是实现一个 AJAX 搜索。当 AJAX 部分工作时,将搜索逻辑添加到控制器应该不是问题。

您应该显示您的 searchResultForm 模板。但我想你的问题是你没有将模型正确发送到 gsp,并且你还没有在响应中设置 gsp

如果这是您的模板 gsp:

<div>${s}</div>

您的操作必须是:

def search(String s) {
        render template: 'searchResultForm', model:[s:s]
    }

通过这种方式,动作生成 html 以给定模型发送,由 jquery 渲染到 div。