【问题标题】:Jquery Validate Remote is failing. Can't submit formJquery 验证远程失败。无法提交表单
【发布时间】:2011-09-07 05:14:02
【问题描述】:

我有一个曾经有效的表单验证,包括远程检查可用的用户名。我们已经在 script.js 文件中添加了许多其他的 javascript,并且在最近的某个时候,它的远程部分坏了。 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.'
            }
        }
    });

正如我所说,上面的内容过去可以正常工作,没有任何变化。我检查了 script.js 文件的其余部分,没有出现任何错误。此外,在该站点中,我们没有在任何地方看到 JS 错误。如果我删除上述代码的远程部分,则所需的检查将起作用,并且当字段中有值时表单将提交。

使用远程,表单将不会提交,无论远程调用的 ajax 响应是真还是假,都不会显示 jQuery validate 错误消息。这是远程调用的页面。就给定值给出的响应而言,它工作正常:

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

}

?>

我不确定从这里去哪里。想法?

【问题讨论】:

  • 您是否使用过console.log 或查看过ajax 调用来调试问题?
  • 我看过 Firebug 并且 ajax 调用返回 200 OK 以及相应的 true 或 false 。该功能工作正常 - 表单无法正确提交或响应不可用的用户名。

标签: jquery jquery-validate


【解决方案1】:

我使用的是 JQ 1.5.1,刚刚更新到 1.6.3,现在表单工作正常。我想也许远程和 1.5.1 有问题?谢谢大家。

【讨论】:

    【解决方案2】:

    您没有使用远程选项发送数据。

    试试这个。对你有帮助。

    $("#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。 打印真假。

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

    【讨论】:

    • 谢谢。我从来不需要将数据参数添加到这个远程调用中。测试远程调用的页面表明它正在获取#new_name 字段值。我添加了 data 参数只是为了尝试它,但它没有改变任何东西。还将输出更改为 echo "true" / echo "false" (直到昨天我才拥有它),这也没有改变任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多