JQuery Validate Remote не работает. Не удается отправить форму

у меня есть то, что раньше было проверкой рабочей формы, включая удаленную проверку имени пользователя. мы добавили много других javascript в скрипт.файл js и в какой-то момент недавно удаленная часть этого сломалась. Существует только одно поле формы, проверяемое validate, поле 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.'
            }
        }
    });

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

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

<?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 ответов


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


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

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

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