使用jquery validate插件返回带有远程的字符串

时间:2010-06-03 15:29:39

标签: jquery jquery-validate validation client-side-validation

从jquery文档中,描述jquery validate插件的远程功能:

响应被评估为JSON,对于有效元素必须为true,并且对于无效元素,可以是任何false,undefined或null,使用默认消息;或者一个字符串,例如。 “该名称已被采用,请尝试使用peter123”显示为错误消息。

我有一个回应是响应的php页面,如果我使用echo(“true”)或echo(“false”),它的工作原理如上所述。但是,每当我回显字符串时,都不会显示错误消息,甚至不显示默认消息。我该怎么做才能回显错误信息并将其显示在要验证的输入框旁边的错误标签中?

这是我的jquery函数:

$(document).ready(function(){
    $("#masq").validate({ 
        rules: { 
             user: {
                required:true,
                minlength:1,
                remote:"<?=$_SERVER['PHP_SELF']?>?action=remoteCheck"
             }
        }, 
        messages: { 
            user: "id must have at least 1 character."
        } 
    });         
 });

和我的php函数:

//sql validation here
    if(!$user) {
        $return = "id " . $user . " does not exist."; 
        //echo("false"); works correctly
            echo($return); //does  
    }
    else {
        echo("true");
    }

4 个答案:

答案 0 :(得分:2)

我也挣扎于此(我需要传递多个值,并且根据哪些条件返回false,显示连接的错误消息,但这是另一个SO帖子),但就像我最初做的那样,你是误会文档说的是什么 - 它只能返回true或false(因为它以JSON格式传递) - 它所指的“字符串”是你使用消息:代码,然后指定与你的错误相关的消息: / p>

以下是一个示例(带注释):

$("#MemberInfo").validate({
    errorPlacement: function(error, element) {
           error.insertAfter(element);
       },
    rules: {    
        Memberemail: {
            required: true,
            email: true,
            remote: "checkReg.cfm"
        },

    },
    messages: {
        Memberemail: {
            required: "Please enter a valid email address",
            remote: jQuery.validator.format("{0} is already registered")    
        }
    }
});

服务器端代码返回“true”或“false”,并且消息中的{0}将从表单传递给服务器端脚本的值放入,并打印出该消息以及其他自定义错误消息在字段旁边显示的错误中。

我还在学习JQuery,所以我希望这可以帮助你或其他任何人,如果它仍然是你的问题!

答案 1 :(得分:2)

我可以确认,如果您的服务器返回有效的 JSON (不仅仅是有效的JS),则可以返回一个字符串。在Ruby on Rails中,我能够通过"my string".to_json完成此任务,它负责任何必要的转义。不确定PHP的方法是什么。需要对JSON字符串进行双重引用,如下所示:'My name is "Liam"'.to_json => ""My name is \\"Liam\\"""。无论您的服务器平台是什么,您都需要提供与=>右侧相似的字符串。

答案 2 :(得分:1)

正如文档所述,您需要输出有效的JavaScript,因此引用您的字符串(如果您的ID可能包含引号或其中的内容,请不要忘记转义):

$return = "\" id" . $user . " does not exist.\"";

你不会输入

var foo = id 2 does not exist.;
在JS中也是

,你呢?

答案 3 :(得分:0)

我在github中输入了一个错误,但这应该回答你的问题 它不理想,但它会让你的东西工作

<强>之情况
将表单上的日期与数据库中的日期进行比较 用于远程调用PHP Lithium框架中的方法。
响应是json对象{“data”:“true”}或{“data”:“请输入大于xx / xx / xxxx的日期”}

这失败了 追踪它通过显示它在发布时的短路(我认为)。

如果我传回一个字符串“true”或“false”,它就可以正常工作 如果我传回“某种消息”而不是虚假,它也会中断。

文档说我应该能够传回一条消息,好吧,如果我传递一个布尔值以外的任何东西,它就会中断。
我不确定我是否还需要添加标题或其他内容?

解决方法
我下载了实际的源文件(而不是使用cdn) 我在响应response.data时修改了第976行和第985行,并使用了我原来的json对象。