Grails 从 2.x 升级到 3.x。 Ajax 升级后不呈现模板

Grails upgrade to 3.x from 2.x. Ajax does not render template after upgrade

我正在将 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 因为所有模板必须以下划线开头。