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

从jquery文档中,描述了jquery validate插件的远程function:

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

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

这是我的jquery函数:

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

和我的PHPfunction:

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

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

我也在努力解决这个问题(我需要传递多个值,并且根据哪些条件返回false,显示连接错误消息,但这是另一个SOpost),但就像我最初做的那样,你误解了文档的内容说 – 它只能返回true或false(因为它以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,所以我希望这可以帮助你或其他任何人,如果它仍然是你的问题!

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

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

你不会打字

 var foo = id 2 does not exist.; 

在JS中,你呢?

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

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

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

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

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

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