Grails ajax jquery
<html>
<head xmlns="http://www.w3.org/1999/html" xmlns="http://www.w3.org/1999/html">
<meta name="layout" content="adminlte">
<script>
$(document).ready(function () {
$("#form1").submit(function (e) {
$.ajax({
type: "POST",
url: "${g.createLink( action:'formSubmit')}",
data: $(this).serialize(), // serializa los elementos del form.
success: function (data) {
// $('#container').append(data); agrega al div
$('#container').html(data); // inserta al div
},
error:function (jqXHR, textStatus, errorThrown) {
}
});
e.preventDefault();
});
});
</script>
</head>
<body>
<g:form name="form1">
<div id="container"></div>
Nombre: <g:textField name="nombre" /><br/>
Apellidos: <g:textField name="apellidos" /><br/>
<g:submitButton name="enviar"/>
</g:form>
</body>
</html>
class TestController {
def index() {
}
def formSubmit(String nombre, String apellidos) {
// Aquí también se puede enviar un TEMPLATE o una VISTA:
// render template: "X", model:[]
// render view: "Y", model:[]
render text: "respuesta ajax, nombre=${nombre}, apellidos=$apellidos"
}
}
Evento personalizado javascript que lanza una petición ajax con jquery hacia un evento webflow. Este método permite enviar más de 1 parámetro javascript al controlador.
<html>
<head xmlns="http://www.w3.org/1999/html" xmlns="http://www.w3.org/1999/html">
<meta name="layout" content="adminlte">
<script>
function enviarAjax() {
$.ajax({
type: "POST",
url: "${g.createLink( action:'formSubmit')}",
data: {id: Math.random()}, // Datos que se envían al controlador/acción
success: function (data) {
// $('#container').append(data); agrega al div
$('#container').html(data); // remplaza el contenido del div
},
error:function (jqXHR, textStatus, errorThrown) {
}
});
}
</script>
</head>
<body>
<a href="#" onclick="enviarAjax();">Enviar por ajax</a>
<div id="container"></div>
</body>
</html>
Note que en data
se puede enviar N parámetros al controlador a diferencia de g:functionRemote
que solo permite el envío de 1 parámetro
class TestController {
def index() {
}
def formSubmit(String id) {
// Aquí también se puede enviar un TEMPLATE, un
render text: "Este es el id enviado=$id"
}
}
<html>
<head xmlns="http://www.w3.org/1999/html" xmlns="http://www.w3.org/1999/html">
<meta name="layout" content="adminlte">
<script>
function enviarAjax() {
$.ajax({
type: "POST",
url: "${g.createLink( action:'formSubmit')}",
data: {id: Math.random()}, // Datos que se envían al controlador/acción
success: function (json) {
var str = JSON.stringify(json, null, 2); // spacing level = 2
var result = eval(json);
var text = str + ": AEROPUERTO.ID=" + result.id + ", AEROPUERTO.NAME=" + result.nombre + ", AEROPUERTO.DIRECCIÓN=" + result.direccion
// $('#container').append(data); agrega al div
$('#container').html(text); // remplaza el contenido del div
}
});
}
</script>
</head>
<body>
<a href="#" onclick="enviarAjax();">Enviar por ajax</a>
<div id="container"></div>
</body>
</html>
import grails.converters.JSON
import org.springframework.security.access.annotation.Secured
class TestController {
def index() {
}
def formSubmit(String id) {
// Aquí también se puede enviar un TEMPLATE, un
def aeropuerto = new Aeropuerto(id: id, nombre: "benito juarez", direccion: "afuera del metro puerto aereo")
render aeropuerto as JSON
}
}
class Aeropuerto {
String id
String nombre
String direccion
}