原型验证无法正常工作

时间:2013-09-17 17:16:00

标签: javascript forms validation prototypejs

我使用Prototype.js来验证表单。对于其中一个字段,我有原型脚本ajax对文件的请求。该文件是一个简单的PHP文件,如果值为OK则返回“1”,如果值不正确则返回“0”。我有如下脚本,它应该完美。当字段未通过验证时,原型验证应显示验证错误消息,并且在字段通过验证后不显示/删除消息。但在这种情况下,即使ajax文件返回'1',验证仍会显示错误消息。任何能够提供帮助的人都将不胜感激!

['validate-number3', numessage3, function(v) {
new Ajax.Request('test.php?nr='+v, {
  method:'get',
  onSuccess: function(transport) {
    var response = transport.responseText;
    if(response == '1'){return true;}else{return false};
  }
});
}],

2 个答案:

答案 0 :(得分:0)

来自Ajax.Request的返回值是Ajax.Request对象,并在设置请求后立即返回 - 在请求完成后调用onsuccess回调 - 因此检查结果Ajax.Request对你想要完成的事情没有用。

这不能按预期工作的原因,这是一个异步调用,这意味着它将启动调用,然后在处理时将控制权返回给脚本,然后在完成后运行回调。

以这种方式试试

new Ajax.Request('test.php?nr='+v, {
  method:'get',
  onSuccess: handleResponse
});

function handleResponse( transport ){
    var response = transport.responseText;
    if(response == '1'){
       //everything is OK 
    }else{
       //value is not OK 
    };
}

答案 1 :(得分:0)

我能够解决我的问题! 感谢这个teriffic页面:http://inchoo.net/ecommerce/magento/magento-frontend/magento-form-field-ajax-validation/没问题。这就是我最终的结果:

var ok = false;
new Ajax.Request('test.php?nr='+v, {
  method:'get',
  asynchronous: false,
  onSuccess: function(transport) {
    var response = transport.responseText;
    if(response == '1'){ok = true;}else{ok = false;};
  },
  onComplete: function() {
            if ($('advice-validate-number-pay_bank_no')) {
                $('advice-validate-number-pay_bank_no').remove();
            }
  }
});
return ok;