我正在从grails 2.5.4到3.1.9升级grails应用程序,我遇到了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>
我不得不将资源从资源插件重新加载到资产管道,所以我想可能存在问题,但我不知道问题出在哪里。有什么想法吗?
答案 0 :(得分:1)
由于您想要渲染模板(例如HTML片段而不是整页),您应该使用render(template: '/ajax/localitiesWithCount', model: [localitiesCountList: localitiesCountList])
并确保您的GSP名为_localitiesWithCount.gsp
,因为所有模板都必须以下划线。