Jquery验证远程检查唯一不起作用

时间:2012-02-01 12:30:02

标签: php jquery jquery-validate

我想在网上发帖,因为我一直在搜索这个JQuery Remote验证问题。我无法让它发挥作用。我认为我的PHP代码是正确的,因为我在URL中使用查询测试URL,它返回false和true,具体取决于记录集计数是一个或多个

这是我的Jquery验证码:

// validate form and submit
var $j = jQuery.noConflict();
$j(document).ready(function(){
$j("#myform").validate({
rules: {
ord_ref: {
required: true,
minlength: 12,
remote: "check_ord_ref.php"
},
messages: {
ord_ref: {
remote: "Order Number Does Not Exist"
}
}
}
});
});

这是我的远程页面“check_ord_ref.php”的PHP代码

$colname_rscheck_ord_ref = "-1";
if (isset($_GET['ord_ref'])) {
  $colname_rscheck_ord_ref = (get_magic_quotes_gpc()) ? $_GET['ord_ref'] : addslashes($_GET['ord_ref']);
}
mysql_select_db($database_conn, $conn);
$query_rscheck_ord_ref = sprintf("SELECT ref_ord FROM orders WHERE ref_ord = '%s'", $colname_rscheck_ord_ref);
$rscheck_ord_ref = mysql_query($query_rscheck_ord_ref, $conn) or die(mysql_error());
$row_rscheck_ord_ref = mysql_fetch_assoc($rscheck_ord_ref);
$totalRows_rscheck_ord_ref = mysql_num_rows($rscheck_ord_ref);
if($totalRows_rscheck_ord_ref < 0){
        $valid = 'false';
        } else {
        $valid = 'true';

         }
         echo $valid;

请帮助我和其他有问题的人解决这个难题

  1. 使用JQuery 1.5.2min
  2. 在没有远程功能的情况下验证确定

4 个答案:

答案 0 :(得分:2)

好的,所以我不是PHP专家,但我知道jQuery Validate需要远程验证方法的以下结果:

  

响应评估为JSON ,对于有效元素必须为true,   并且对于无效元素可以是任何false,undefined或null

向下发送"true""false"(注意引号)将导致值被解析为错误消息,而不是被评估为布尔基元。

回到PHP部分,我你应该使用带有布尔原语的json_encode。我不太确定在PHP中这样做的方法,但我相信它会是这样的:

$colname_rscheck_ord_ref = "-1";
if (isset($_GET['ord_ref'])) {
  $colname_rscheck_ord_ref = (get_magic_quotes_gpc()) ? $_GET['ord_ref'] : addslashes($_GET['ord_ref']);
}

mysql_select_db($database_conn, $conn);
$query_rscheck_ord_ref = sprintf("SELECT ref_ord FROM orders WHERE ref_ord = '%s'", $colname_rscheck_ord_ref);
$rscheck_ord_ref = mysql_query($query_rscheck_ord_ref, $conn) or die(mysql_error());
$row_rscheck_ord_ref = mysql_fetch_assoc($rscheck_ord_ref);
$totalRows_rscheck_ord_ref = mysql_num_rows($rscheck_ord_ref);

if($totalRows_rscheck_ord_ref < 0){
    $valid = false; // <-- Note the use of a boolean primitive.
} else {
    $valid = true;
}

echo json_encode($valid);

答案 1 :(得分:0)

这个问题似乎困扰着远程验证脚本编写者,而且关于这个问题的jQuery文档显然缺乏。

我注意到你正在使用jQuery 1.5.2:根据我的理解(并从经验中发现)你必须使用带有$ _REQUEST的1.4版之后的版本发送到远程脚本的jQuery回调,并且jQuery期望“true” “或”假“作为STRING。这是一个例子,确认在多种形式上工作(我使用的是jQuery 1.7.1):

if($totalRows_rscheck_ord_ref < 0){
    header('Content-type: application/json');
    $valid = 'false'; //    <---yes, Validate is expecting a string
    $result = $_REQUEST['callback'].'('.$check.')';
    echo $result;
} else {
    header('Content-type: application/json');
    $valid = 'true'; //    <---yes, Validate is expecting a string
    $result = $_REQUEST['callback'].'('.$check.')';
    echo $result;
}

我随机找到了这个答案here(在答案部分),并且已经停止拔出我的头发了。希望这有助于某人。

答案 2 :(得分:0)

要添加上面的Andrew Whitaker的回复,我必须强调您确定响应是严格的JSON并且没有返回其他内容类型。我的脚本遇到了同样的问题,所有内容似乎都设置正确 - 包括使用json_encode()。在使用Firebug的NET选项卡进行一些故障排除后,我能够确定PHP通知被发送回浏览器,将数据从JSON转换为text / html。在我关闭错误后,一切都很好。

答案 3 :(得分:0)

// check_validate.php

<?php

// some logic here

echo json_encode(true);
?>