【问题标题】:Jquery Validation Remote Check Unique Not WorkingJquery Validation Remote Check Unique 不工作
【发布时间】:2012-02-01 12:30:02
【问题描述】:

我想在网上发布这篇文章,因为我已经搜索了几天关于这个 JQuery 远程验证问题。我无法让它工作。我认为我的 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.2 分钟
  2. 在没有远程功能的情况下验证 OK

【问题讨论】:

    标签: php jquery jquery-validate


    【解决方案1】:

    好的,所以我不是 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);
    

    【讨论】:

    • 您好,感谢您的帖子和时间。我在其他论坛上阅读过有关使用 json_encode 返回响应的信息。我已经在我的 PHP 代码上更改了它,但它仍然不起作用。
    • @ZeePee:您使用的是布尔原语吗?即true 而不是"true"
    • 您好我都试过了这是当前的代码:echo false; } 其他 { 回声真;我也试过 $valid = false; } 其他 { $valid = true; } echo json_encode($valid);
    【解决方案2】:

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

    我注意到您正在使用 jQuery 1.5.2:据我了解(并从经验中发现)您必须使用 jQuery 回调,该回调使用 $_REQUEST 发送到远程脚本,版本低于 1.4,并且 jQuery 期望“true” " 或 "false" 作为字符串。这是一个示例,确认可以处理多个表单(我使用的是 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(在答案部分),并且从此不再拔头发。希望这对某人有所帮助。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        //check_validate.php

        <?php
        
        // some logic here
        
        echo json_encode(true);
        ?>
        

        【讨论】:

        • 这个应该如何使用?目前,这个 sn-p 对给出的答案几乎没有任何价值。
        猜你喜欢
        • 1970-01-01
        • 2016-10-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2020-05-20
        • 2022-12-01
        • 2020-04-20
        • 1970-01-01
        相关资源
        最近更新 更多