我想在网上发帖,因为我一直在搜索这个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;
请帮助我和其他有问题的人解决这个难题
答案 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);
?>