【问题标题】:Grails upgrade to 3.x from 2.x. Ajax does not render template after upgradeGrails 从 2.x 升级到 3.x。 Ajax 升级后不渲染模板
【发布时间】:2017-02-11 22:11:46
【问题描述】:

我正在将 grails 应用程序从 grails 2.5.4 升级到 3.1.9,但我遇到了 ajax 调用问题。

我的应用程序中有 gsp 模板,它使用 ajax 请求从服务器异步加载数据。这是其中之一。

以下 javascript 调用激活 ajax 请求。

$(document).ready(function () {

    $(".chosen-select").chosen();
    $(".automaticAjaxLoad").each(function () {


        var url = $(this).attr("ajaxLoadingUrl");

        if (url != "") {

            $(this).load(url);
        }
    });
});

这成功调用了以下控制器操作。

def getLocalitiesWithCount() {
    def localitiesList = Locality.list(sort: "posOrder", order: "desc")
    def localitiesCountList = []
    localitiesList.each { locality ->
        def c = JobOffer.withCriteria() {
            createAlias("positionLocality", "_positionLocality", CriteriaSpecification.LEFT_JOIN)
            eq("_positionLocality.id", locality.id)
            //between("l.accessDate", today, today + 1)

            gt('willExpire', new Date())
            isNotNull('datePublished')

            projections {
                // countDistinct("id")
                rowCount()
            }
        }
        def jobCountMap = [:]

        jobCountMap.put("i18NameFull", locality.i18NameFull)
        jobCountMap.put("i18Name", locality.i18Name)
        jobCountMap.put("id", locality.id)
        jobCountMap.put("name", locality.name)
        jobCountMap.put("count", c.first())

        localitiesCountList.push(jobCountMap)

        log.error('Localities count ' + localitiesCountList.size());

    }
    render(view: '/ajax/localitiesWithCount', model: [localitiesCountList: localitiesCountList])
}

直到这一刻,一切都按预期进行。比它应该呈现以下 gsp 模板,但它没有。应该属于的地方留空,控制台没有错误

<h4> ${message(code: "localities.header")} </h4>
    <hr>


        <ul style="font-size: 85%; margin: 0; list-style: none;">
            <g:each in="${localitiesCountList}"
                    status="i" var="localityInstance">

                <g:if test="${localityInstance.count != 0}" >
                <li>

                    <g:link controller="jobOffer" action="index" params="[positionLocalities: localityInstance.id]">
                        <h8>
                            ${message(code: localityInstance.i18NameFull)}

                         [${localityInstance.count}]
                        </h8>
                    </g:link>

                </li>

                </g:if>

            </g:each>

        </ul>

我不得不重新加载从资源插件到资产管道的资产,所以我想可能存在问题,但我不知道问题可能出在哪里。有什么想法吗?

【问题讨论】:

  • 由于您要呈现模板(例如 HTML 片段而不是整页),您应该使用 render(template: '/ajax/localitiesWithCount', model: [localitiesCountList: localitiesCountList]) 并确保您的 GSP 命名为 _localitiesWithCount.gsp。我怀疑这会解决您的问题,或者至少让您更接近解决方案。
  • 谢谢你:)。这似乎有效。

标签: jquery ajax grails grails3


【解决方案1】:

由于您要呈现模板(例如 HTML 片段而不是完整页面),您应该使用 render(template: '/ajax/localitiesWithCount', model: [localitiesCountList: localitiesCountList]) 并确保您的 GSP 命名为 _localitiesWithCount.gsp,因为所有模板都必须以下划线开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2019-07-15
    • 2010-09-05
    相关资源
    最近更新 更多