3

来自 jquery 文档,描述了 jquery validate 插件的远程功能:

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

我有一个回显是响应的 php 页面,如果我使用回显(“真”)或回显(“假”),它的工作方式与描述的一样。但是,每当我回显一个字符串时,都不会显示错误消息,甚至不会显示默认消息。我必须怎么做才能回显错误消息并将其显示在正在验证的输入框旁边的错误标签中?

这是我的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

4 回答 4

2

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

于 2011-09-30T17:40:58.187 回答
2

我也为此苦苦挣扎(我需要向它传递多个值,并根据哪些条件返回 false,显示串联的错误消息,但这是另一个 SO 发布),但就像我最初所做的那样,您误解了文档的内容说 - 它只能返回真或假(因为它以 JSON 格式传递) - 它所指的“字符串”是指您是否使用消息:代码,然后指定与您的错误相关的消息:

这是一个示例(带注释):

$("#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,所以我希望这对你或其他任何人都有帮助,如果这对你来说仍然是个问题!

于 2011-03-07T22:23:38.217 回答
1

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

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

你不会打字

var foo = id 2 does not exist.;

在 JS 中,你会吗?

于 2010-06-03T15:34:07.830 回答
0

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

Scenerio
将表单上的日期与数据库中的日期进行比较。
用于远程调用 PHP Lithium 框架中的方法。
响应是一个 json 对象 {"data" : "true"} 或 {"data" : "请输入大于 xx/xx/xxxx 的日期"}

这惨不忍睹。
跟踪它显示它在做帖子时短路(我认为)。

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

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

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

于 2012-04-20T03:37:13.290 回答