He creado un formulario web utilizando la API de formulario. Estoy usando la #AJAX
opción de campo para agregar la validación AJAX a cada campo.
¿Es posible validar y enviar el formulario usando AJAX sin volver a cargar la página? Si la validación falla, quiero mostrar un mensaje de error y si la validación es exitosa, entonces quiero mostrar un mensaje (idealmente en una caja de luz) y restablecer los campos del formulario.
Mi código hasta ahora:
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#default_value' => '',
'#maxlength' => '128',
'#required' => TRUE,
'#ajax' => array(
'callback' => '_validate_name',
'wrapper' => 'name-error-icon-container',
'method' => 'html',
'effect' => 'none',
'progress' => array(
'message' => NULL,
),
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
'#ajax' => array(
'callback' => '_handle_form_submit',
'effect' => 'fade',
),
);
las funciones de devolución de llamada se ven así:
function _validate_name($form, $form_state) {
if ($form_state['values']['name'] != '') {
$output = 'OK';
}
else {
$output = 'Enter a value';
}
return $output;
}
function _handle_form_submit($form, $form_state) {
}
Pero no estoy seguro de qué debe ir en la _handle_form_submit
función para validar y luego devolver un mensaje o enviar un formulario y restablecer los campos.
Sé que esta pregunta ha estado rondando por un par de años por ahora, pero no creo que ninguna de las otras respuestas realmente entienda el envío del formulario Drupal 7 ajax, así que intentaré explicarlo.
Sinve su formulario debería funcionar tan bien sin el ajax como por buena práctica, su controlador de envío ajax no debería hacer nada más que devolver el formulario. Todo lo demás debe estar en su validación y enviar funciones.
fuente
Creo que la publicación de maxtorete el 17 de octubre de 2011 parece dar un ejemplo más completo usando ambos
form_validate()
yform_submit()
(No lo he probado todavía).
También la respuesta de Joshua Stewardson en el desbordamiento de pila tiene un buen ejemplo de trabajo:
Joshua señala que los mensajes de error de validación reemplazan el
#ajax['wrapper']
elemento por completo, por lo que su devolución de llamada debe reabastecer este elemento nuevamente mientras lo reemplaza.fuente
En general, la validación y el manejo de envío de formularios deben realizarse en las devoluciones de llamada habituales _validate () y _submit (). La idea es que los formularios aún deberían funcionar sin ajax.
Prácticamente lo único que deben hacer las devoluciones de llamada #ajax es devolver la parte del formulario que debe reemplazarse, de acuerdo con el contenedor definido.
fuente
#ajax
función de devolución de llamada en Drupal 7, solo devuelve la parte del formulario que desea reemplazar.Hay dos maneras
1)
2) Módulo de ejemplo http://cgit.drupalcode.org/examples/tree/ajax_example/ajax_example.module?id=refs/heads;id2=7.x-1.x#l402
fuente
En mi caso, el uso de un
submit
tipo causó el formulario para enviar siempre, así que lo cambié a unabutton
con#ajax
especificada. Luego, tuve que hacer mi validación en la devolución de llamada ajax.Estaba haciendo un panel de ctools; No sé si eso juega con eso.
fuente