Grails 2.0使用submitToRemote更新select并进行渲染

时间:2012-01-04 15:19:39

标签: grails groovy gsp

我使用Grails 2 submitToRemote 标签时遇到问题。

以下代码是我在控制器中使用的代码:

def getProposal = {
    def layouts = importService.getLayoutsFor(params.product as int)
    render(contentType: "text/xml") {
        for (layout in layouts) {
            option("${layout}")
        }
    }
}

并在GSP中:

<g:submitToRemote action="getProposal" update="layouts"
    onLoading="showProgress();" onComplete="hideProgress();"
    value="Do It" />
<select id="layouts" name="layout" required="">
</select>

使用jquery会导致:

showProgress();;jQuery.ajax({type:'POST',data:jQuery(this).parents('form:first').serialize(), url:'/app/controller/getProposal',success:function(data,textStatus){jQuery('#layouts').html(data);},error:function(XMLHttpRequest,textStatus,errorThrown){},complete:function(XMLHttpRequest,textStatus){hideProgress();}});return false

哪个不起作用并且返回错误:

Node cannot be inserted at the specified point in the hierarchy

但是如果我使用另一种渲染方法,如:

render(status: 0, text: "<option value='1'>Layout 1</option>")

它有效。

在这两种情况下,预期答案都会被传回。

我不明白为什么它不适用于第一种更好的方法。谁能解释我做错了什么?

THX

编辑:

我注意到,如果我使用渲染(contentType:“text / text”),它将起作用。可能有事情要做,xml没有正确格式化(没有根节点?)。但为什么它在Grails 1.3.7中有效?

1 个答案:

答案 0 :(得分:0)

Grails 1.3.7有一个不同的默认javascript提供者(原型)。 jquery ajax调用trys根据收到的内容推断响应的类型