gpt4 book ai didi

ajax - Grails 3.3.4简单的Ajax调用

转载 作者:行者123 更新时间:2023-12-02 14:48:31 25 4
gpt4 key购买 nike

我试图在Grails 3.3.4中使用Ajax调用保存记录。我看过其他职位,但似乎没有一个解决方案对我有所帮助。
远程标签在Grails 3中已弃用,因此不会有任何选择。我还需要获取所有表单字段,而不是单个文本框。但似乎我的表单数据没有通过。有任何想法吗?
提交表单时,出现以下错误:

Error 500: Internal Server Error

URI /user/saveAjax

Class groovy.lang.MissingMethodException

Message null

Caused by No signatureof method:com.vogella.grails.guestbook.$UserServiceImplementation.save() isapplicable for argument types:(grails.web.servlet.mvc.GrailsParameterMap) values: [[controller:user,format:null, action:saveAjax]] Possible solutions:save(com.vogella.grails.guestbook.User), wait(), any(), wait(long),any(groovy.lang.Closure), isCase(java.lang.Object)


package com.vogella.grails.guestbook

class User {
String name
String last
static constraints = {
name (blank:false, nullable:false, size:3..30, matches:"[a-zA-Z1-9_]+")
}

String toString(){
return name;
}
}
控制者
package com.vogella.grails.guestbook

import grails.validation.ValidationException
import static org.springframework.http.HttpStatus.*

class UserController {

UserService userService

static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
static scaffold = User

def saveAjax(params) {
render params
userService.save(params)
render "Success!"

}
}
普惠制
<!doctype html>
<html>
<head>
<meta name="layout" content="main"/>
<title>Welcome to Grails</title>

<g:javascript library='jquery' />

</head>
<body>


<g:form id = "my_awesome_form">
<g:textField id = "box1" name="mytextbox"/>
<g:textField id = "box2" name="mytextbox2"/>
<input type="button" id = "mybutton" onclick="changeName()" value="create user"/>
</g:form>
<div id="resultDiv"></div>

<script>
function changeName()
{ event.preventDefault();
$.ajax({
url:"<g:createLink url="[action:'saveAjax',controller:'User']" />",
dataType: "json",
type:"post",
data: $('#my_awesome_form').serialize(),
success: function() {
$( "#resultDiv" ).addClass( 'alert alert-info' ).append( 'Successfully saved event' )
},
error: function(xhr, status, error) {
$( "#resultDiv" ).addClass( 'alert alert-info' ).append(xhr.responseText);
}
});
}
</script>

</body>
</html>
尝试通过传递数据时调用params.box1时

$('#my_awesome_form').serialize();


我收到:

Caused by Ambiguous method overloading for methodgrails.artefact.controller.support.ResponseRenderer$Trait$Helper#render.Cannot resolve which method to invoke for [classcom.vogella.grails.guestbook.UserController, null] due to overlappingprototypes between: [interfacegrails.artefact.controller.support.ResponseRenderer, interfacejava.lang.CharSequence] [interfacegrails.artefact.controller.support.ResponseRenderer, interfacejava.util.Map]

最佳答案

该错误表明您正在将映射params传递给需要userService save对象的User方法,您可以更改userService save方法的实现,以便它接受映射,或者像这样将其传递:

userService.save( new User( params ) )

这假定表单中的字段ID与 User域中的字段名称匹配,因此Grails能够 bind them,如果不更改它们以使其匹配(容易得多),或者您必须像这样手动设置它们:
def user = new User()
user.name = params.box1
...

关于ajax - Grails 3.3.4简单的Ajax调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51645288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com