1

我有一个带有验证码的自定义表单。Captcha 不是模块/插件,它只是我编写的自定义。我想使用带有 validate.js / varien form.js 的 ajax(没有页面刷新)来验证验证码,这是 magento 默认验证器。我用validation.add() 编写了jQuery.ajax 功能。我的问题是,validator() 没有等待 ajax 响应(真/假),它的状态为“未定义”并显示错误。

我在下面粘贴了我的代码:

Validation.add('validate-captcha', 'Please enter correct captcha', function (v) {
  var cp = isValidCaptcha();
  return cp;
});

function isValidCaptcha(){
  var captcha_value = jQuery("#security_code").val();
  var a = 0;
  jQuery.ajax({
    type: "POST",
    url: "<?php echo $this->getUrl('tqr/index/chkcaptcha'); ?>",
    asynchronous:true,
    data: { security_code1: captcha_value },
    dataType: "html",
    success: function(data){
      if( data == 1 ){
        a = 1;
      } else {
        a = 2;
      }                 
    }

  });

  if( a == 1 ){
   return true;
  } else if ( a == 2  ){
    return false;
  }

}

提前致谢

4

2 回答 2

1

基本上你的问题是,据我了解,你的 Validate 函数不会等待isValidCaptcha().

为了创建 2 个函数firstFunctionsecondFunction相互等待,您必须按以下方式调用它们:

firstFunction(function(){
    secondFunction();
});

此外,您还必须为第一个函数定义回调:

function firstFunction(callback){
    // do stuff here
    callback();
}

function secondFunction(){
     // do ajax call here
}

firstFunction是验证者,而您的secondFunctionisValidCaptcha()进行 AJAX 调用的。

于 2012-09-24T13:41:51.220 回答
0

当 AJAX 响应返回并且原型验证器将运行时触发提交。

于 2012-11-21T05:28:43.727 回答