【问题标题】:Grails: getting object/model from AJAX responseGrails:从 AJAX 响应中获取对象/模型
【发布时间】:2011-07-12 03:19:56
【问题描述】:

我是 Grails 的新手,现在我正在尝试使用 AJAX 将对象/模型从控制器检索到模板。我想这样做,以便 messageBox 模板可以访问 sms 属性,但这总是会返回一个空值。谁能帮我解决这个问题?任何答案将不胜感激,这是我当前的代码。

在我的客户端

    <g:form>
    <label for="id">Sms ID </label>
    <g:textField name="id" />
    <g:submitToRemote value="search" update="msgBox"
                  url="[controller:'sms', action:'send']"/>
 </g:form>
<g:render template="messageBox" model="${[sms:sms]}/>

我的控制器

SmsController{

def send = {
  def sms = new Sms(...)
  //assume properties have been set
  ...
  ...
  render(template: messageBox, model:[sms:sms])
 }
}

还有我的 _messageBox.gsp

<div id="msgBox">
    <span>Sms Property 1: ${sms?.property1}</span>
    <span>Sms Property 2: ${sms?.property2}</span>
    <span>Sms Property 3: ${sms?.property3}</span>
</div>

【问题讨论】:

  • 如果直接调用控制器闭包会发生什么?即,如果您输入 (localhost:8080/sms/send/id),它会呈现您的模板吗?
  • @proflux,是的,它可以很好地呈现模板。感谢您的回复

标签: ajax grails response


【解决方案1】:

这里似乎有一些逻辑错误

首先,您似乎将 messageBox 模板渲染了两次。在您正在调用的“客户”gsp 中...

  <g:render template="messageBox" model="${[sms:sms]}/>

页面加载时“sms”将始终为空,除非在页面加载时为您提供了一个。然后你似乎也在你的控制器中再次调用它......

render(template: messageBox, model:[sms:sms])

另外,我会将 div:'msgBox' 移出模板并进入您的客户端,例如...

  <g:form>
    <label for="id">Sms ID </label>
    <g:textField name="id" />
    <g:submitToRemote value="search" update="msgBox"
                  url="[controller:'sms', action:'send']"/>
 </g:form>
<div id="msgBox">Waiting for some AJAX!</div>

最后,确保您的标头中有一个 javascript 库,例如原型或 jquery。我不确定这是否会解决您的问题,但这将是一个好的开始。告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 2017-06-16
    • 2014-10-29
    • 2013-08-07
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多