Jquery Validate Remote не работает. Не могу отправить форму - PullRequest
6 голосов
/ 07 сентября 2011

У меня есть то, что раньше было проверкой рабочей формы, включая удаленную проверку имени пользователя, как доступно.мы добавили много другого javascript в файл script.js, и в какой-то момент недавно его удаленная часть сломалась.При проверке проверяется только одно поле формы, поле new_name.Это требуется (работает) и должно быть доступно (не работает).

Вот 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.'
            }
        }
    });

Как я уже говорил выше, работало без изменений.Я проверил остальную часть файла script.js, и никаких ошибок не появляется.Также на сайте мы нигде не видим ошибок JS.Если я удалю удаленную часть кода выше, необходимая проверка сработает, и форма будет отправлена, когда в поле появится значение.

При наличии удаленной формы форма не будет отправлена, и независимо от того, является ли ответ ajax от удаленного вызова истинным или ложным, не отображается сообщение об ошибке проверки jQuery.Вот страница, вызываемая удаленно.Он отлично работает, если дать ответ на данное значение:

<?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);
    }

}

?>

Я не совсем уверен, куда идти дальше.Идеи?

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Я использовал JQ 1.5.1 и только что обновился до 1.6.3, и теперь форма работает нормально. Я думаю, возможно, была проблема с удаленным и 1.5.1? Спасибо, ребята.

0 голосов
/ 07 сентября 2011

Вы не отправили данные с удаленной опцией.

Попробуйте это. Это может быть полезно для вас.

$("#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");                   
        } 

});

А на стороне сервера не используйте json в удаленном режиме. Напечатайте true или false.

   <?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;
    }    
  }
  ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...