Tengo lo que solía ser una validación del formulario de trabajo, incluida la verificación remota de un nombre de usuario como está disponible. hemos agregado muchos otros javascript al archivo script.js y en algún momento recientemente la parte remota de esto se rompió. Solo hay un campo de formulario verificado por validate, el campo new_name. Es obligatorio (funciona) y debe estar disponible (no funciona).Jquery Validate Remote está fallando. No puedo enviar el formulario
Aquí es el jQuery:
$('#nickname_form').validate({
rules: {
new_name: {
required: true,
remote: {
url: '/api/screenname_unique/',
type: 'post'
}
}
},
messages: {
new_name: {
required: 'Please choose a Forum Username.',
remote: 'That Username is already taken or contains invalid characters.'
}
}
});
Como ya he dicho lo anterior usa para trabajar, sin cambios. Revisé el resto del archivo script.js y no aparece ningún error. Además, en el sitio, no estamos viendo errores JS en ninguna parte. Si elimino la parte remota del código anterior, el cheque requerido funciona y el formulario se enviará cuando haya un valor en el campo.
Con el control remoto en su lugar, el formulario no se enviará, y si la respuesta ajax de la llamada remota es verdadera o falsa, no se muestra el mensaje de error jQuery validate. Aquí está la página llamada por control remoto. Funciona bien en cuanto a la respuesta que está dando para un valor dado:?
<?php
header('Content-type: application/json');
//get the post value
$screen_name = $_POST['new_name'];
//get their member_id
$member_id = $this->EE->session->userdata['member_id'];
//return false if no screen_name provided
if((!$screen_name) || (!$member_id)) {
echo json_encode(false);
exit;
} else { //there is a screen_name
//Regex Check for valid chars
$valid = !preg_match('/[^a-z0-9_ -]/i',trim($screen_name));
if (!$valid) {
echo json_encode(false);
exit;
}
//SQL
$results = $this->EE->db->query("SELECT member_id FROM exp_members WHERE screen_name = '$screen_name' and member_id <> '$member_id' limit 1");
if ($results->num_rows() > 0) {
echo json_encode(false);
} else {
echo json_encode(true);
}
}
>
No estoy realmente seguro de a dónde ir desde aquí. Ideas?
¿Ha utilizado 'console.log' o ha mirado las llamadas ajax para solucionar el problema? – yoda
He visto con Firebug y las llamadas ajax devuelven 200 OK junto con verdadero o falso de manera apropiada. La función funciona bien: el formulario simplemente no enviará o responderá correctamente a un nombre de usuario no disponible. –