【问题标题】:Magento: use 'validate-ajax' in forms?Magento:在表单中使用'validate-ajax'?
【发布时间】:2012-09-24 12:59:14
【问题描述】:

我有一个带有验证码的自定义表单。 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;
  }

}

提前致谢

【问题讨论】:

    标签: jquery validation magento


    【解决方案1】:

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

    为了让firstFunctionsecondFunction 两个函数互相等待,你必须通过以下方式调用它们:

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

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

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

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

    【讨论】:

    • 您好感谢您的快速回复。我试过你的想法,但同样的错误重复。能否请您简要介绍一下您的建议?
    • 如果你知道magento,你能告诉我'validate-ajax'方法是如何工作的吗?该方法位于 js/prototype/validate.js
    • 对不起,我不知道 Magento。我从 Javascript 调用机制的角度给出了答复。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多