我难以让我的ajaxform正常工作。我正在使用Grails 2.4.4并具有以下remoteForm代码。
查看usedProducts
<div id="updateMe">
<g:each in="${productList}" var="product">
${product.item} Success1
</g:each>
</div>
<g:formRemote name="myForm"
url="[controller:'product', action: 'save']" update="updateMe">
<g:textField name="item" required="" value="${newProduct?.item}" />
<g:submitButton name="Save" />
</g:formRemote>
Controller ProductController
def usedProducts = {
[productList:Product.findAll()]
}
@Transactional
def save(Product productInstance) {
productInstance.save flush:true
[productList: Product.findAll()]
}
控制台错误
POST http://localhost:8080/TekDays/product/save
404 Not Found
54ms
jquery -... e = false(第9631行)
“NetworkError:404 Not Found - http://localhost:8080/TekDays/product/save”
答案 0 :(得分:1)
我担心你不能这样做,你正试图这样做。
请注意,当用户有效执行AJAX调用时,不再有GSP标记。只有CSS,HTML和Javascript。这是浏览器世界。
请将渲染放在你要返回的地方并进行测试。
@Transactional
def save(Product productInstance) {
productInstance.save flush:true
render Product.findAll()
}
您将看到DIV updateMe的内容将被save方法呈现的内容替换。内容是findAll方法返回的包含所有Product对象的列表。
使用渲染时,返回的内容(GSP模板,变量或HTML的内容)将在当前HTML中呈现,例如,通过AJAX调用。
对于使用return关键字的另一方,需要一个与控制器方法同名的GSP。因为你得到了404,因为找不到save.gsp。注意:如果省略return关键字(就像你正在做的那样)那么groovyc(Groovy编译器)会隐式地为你设置它。
如果我很清楚你想要做什么,那么你必须渲染内容(不归还)。