2011-09-07 59 views
6

我曾经是一个工作表单验证,包括远程检查用户名是否可用。我们已经在script.js文件中添加了很多其他的javascript,并且在最近的某个时候,这个文件的远程部分已经打破。只有一个表单字段被validate检查,即new_name字段。它是必需的(工作),并且必须可用(不工作)。Jquery Validate Remote失败。无法提交表单

这里是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响应是true还是false,不会显示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); 
    } 

} 

>

我真的不知道在哪里可以从这里走。想法?

+1

你使用过'console.log'还是看着ajax调用来调试问题? – yoda

+0

我用Firebug观看过,并且ajax调用返回200 OK以及true或false。该功能工作正常 - 表单不会正确提交或响应不可用的用户名。 –

回答

2

我正在使用JQ 1.5.1,只是更新到1.6.3,现在窗体工作正常。我想也许有遥控和1.5.1的问题?多谢你们。

0

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

试试这个。它对你有帮助。

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

谢谢。我从来没有必要将数据参数添加到此远程调用。测试远程调用的页面显示它正在获取#new_name字段值。我添加了数据参数只是为了尝试它,但它没有改变任何东西。还改变了输出为回声“真”/回声“假”(这是我原来是如何,直到昨天),并没有改变任何东西。 –