我完全坚持使用这个,我喜欢关于我做错了什么或者我可以做些什么来调试问题的建议。
我有jquery验证引擎验证表单。 例如,检查屏幕名称是否存在的代码如下;
<input value="[% fields.screenname | html %]" placeholder="Screenname"
onclick="$('#screenname').validationEngine('showPrompt', 'For example: JohnDoe_68.', 'load')"
class="validate[required,custom[onlyLetterNumber],maxSize[41],ajax[ajaxNameCallPerlScreenname]]"
name="screenname" id="screenname" type="text" size= "41" maxlength="24" data-prompt-position="centerRight"/>
对验证引擎的调用是
jQuery(document).ready(function(){
jQuery("#register").validationEngine('attach', 'autoHidePrompt', {
promptPosition : "topRight",
scroll: "false",
ajaxFormValidation : "true",
onBeforeAjaxFormValidation: "beforeCall",
onAjaxFormComplete: "ajaxValidationCallback"
});
});
在这个阶段,beforeCall和ajaxValidationCallback函数直接来自demo并且永远不会被调用,所以我不会在这里包含它们。
在服务器端,我有一个简单的脚本,检查是否采用了该用户名,并通过用perl编写的脚本返回json(utf8编码)。相关代码是;
use utf8;
my $output;
eval { $output = JSON::XS->new->utf8->encode( $data ); };
if($@)
{
use Carp;
confess($@);
}
warn "Form Output is " . $output;
$self->discard_request_body();
$self->req->content_type('application/json; charset=utf-8');
$self->req->headers_out->set( 'Expires' => 'Thu, 1 Jan 1970 00:00:00 GMT' );
$self->req->headers_out->set( 'Content-Length' => length $output );
$self->req->print($output);
这就是麻烦开始的地方。 在chrome和firefox中,我可以看到验证请求到达服务器, 我可以看到正确的响应被发送回浏览器, 我可以在浏览器中查看正确的响应(我认为)并且像这样
[["screenname","false","That user name is already taken. Please try again."]]
但是从不调用实际的onAjaxFormComplete。如果我在beforeCall和ajaxValidationCallback函数中设置断点,则永远不会调用它们。
标题如下;
Response Headers
Connection Keep-Alive
Content-Encoding gzip
Content-Length 89
Content-Type application/json; charset=utf-8
Date Sat, 19 May 2012 19:47:28 GMT
Expires Thu, 1 Jan 1970 00:00:00 GMT
Keep-Alive timeout=15, max=100
Server Apache/2.2.16 (Debian)
Vary User-Agent,Accept-Encoding
X-UA-Compatible chrome=1
X-What-Alias flooting
Request Headers
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection keep-alive
Cookie flooting_session=be8aec0e39f12ee031c9103072b19a66
Host six.flooting.com
Referer http://six.flooting.com/register
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:12.0) Gecko/20100101 Firefox/12.0
X-Requested-With XMLHttpRequest
这就是我现在可以告诉你的全部内容。我认为我在配置回调函数的方式上缺少一些非常简单的东西,但是我已经反对这个问题了一段时间并且我没有接近答案。
注意beforeAall不是在ajax请求之前调用的,但是我在validationEngine中的相应代码段(应该调用beforeCall)中设置了断点,并且执行永远不会到达它。甚至没有使它成为父函数。
任何人都能看到我错过的东西吗?
答案 0 :(得分:2)
我找到了答案, 在验证引擎的文档中,它表示必须返回一个数组数组以进行表单验证,并返回一个数组进行字段验证。当我应该返回一个数组时,我正在返回一个数组数组。
答案 1 :(得分:0)
我不知道validationEngine,只是尝试一下:而不是函数名作为字符串(“beforeCall”)尝试传递对函数的引用(beforeCall)