2011-09-07 19 views
6

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?

+1

¿Ha utilizado 'console.log' o ha mirado las llamadas ajax para solucionar el problema? – yoda

+0

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. –

Respuesta

2

Estaba usando JQ 1.5.1 y acaba de actualizar a 1.6.3 y ahora el formulario está funcionando bien. Supongo que tal vez haya un problema con Remote y 1.5.1? Gracias chicos.

0

No envía los datos con la opción remota.

Pruebe este. Puede ser útil para ti.

$("#nickname_form").validate({ 

rules: { 
Name: "required", 
email: { 
    required: true, 
    email: true 
}, 

username: 
{ 
    required: true, 
    remote: { 
    url: "http://www.xyz.com/checkusername.php", 
    type: "post", 
    data: { 
     username: function() { 
     return $("#username").val(); 
     } 
    } 
    } 
} 
}, 

messages: { 

Name: "Please enter name.", 
email: { 
    required: "Email address require.", 
    email: "Please enter valid email address." 
}, 

username: 
{ 
    required: " Please enter username.", 
    remote: " Username is already exists please choose other." 
} 
    }, 

errorPlacement: function(error, element) { 
       error.appendTo(element.next()); 
      }, 

submitHandler: function() { 
     sendmail(); 
     }, 
success: function(label) { 
     label.html("&nbsp;").addClass("valid_small");     
     } 

}); 

Y en el lado del servidor no utiliza JSON en la opción remota. Imprima verdadero o falso.

<?php 
    { 
$screen_name = $_POST['username']; 
$member_id = $this->EE->session->userdata['member_id']; 

    $results = $this->EE->db->query("SELECT member_id FROM exp_members WHERE screen_name = '$screen_name' and member_id <> '$member_id' limit 1"); 
    if(count($dataArray)>0) 
    { 
     echo "false";die; 
    } 
    else 
    { 
     echo "true";die; 
    }  
    } 
    ?> 
+0

Gracias. Nunca tuve que agregar el parámetro de datos a esta llamada remota. Al probar la página llamada por control remoto, se muestra que obtiene el valor del campo #new_name. Agregué el parámetro de datos solo para probarlo, pero no cambió nada. También cambié la salida para repetir "true"/echo "false" (que es como lo tenía originalmente hasta ayer) y eso tampoco cambió nada. –

Cuestiones relacionadas