【问题标题】:return false not works for ajax success function in yiireturn false 不适用于 yii 中的 ajax 成功函数
【发布时间】:2015-07-27 11:08:48
【问题描述】:

我想在 yii 中设置唯一电子邮件 ID 的验证,但它不能正常工作,那么问题出在哪里。 我的表单代码如下:

  <div class="row">
    <?php echo $form->labelEx($model1,'user_email'); ?>
    <?php echo $form->textField($model1, 'user_email', array('maxlength' => 300)); ?>
    <?php echo $form->error($model1, 'user_email', array('clientValidation' => 'js:customValidateemail(messages,this.id)'), false, true);
          $infoFieldFile1 = (end($form->attributes)); ?> 
    <p class="emailUniqueCheck" style="margin-left: 24%; color: red;">    
  </div>

我的ajax代码如下:

<script>
function customValidateemail(messages,id){
    var nameC= '#'+id;  
    var a = $(nameC).val();
    if (a == '') {
        messages.push('Email Id is empty.');
        return false;
    }
    var email = $("#Registration_user_email").val();
    $(".emailUniqueCheck").html('<img alt="Loader" src="/images/loading.gif" />');
    $.ajax({
            url:"<?php echo Yii::app()->request->baseUrl;?>"+"/Supplier/checkUniqueEmail?email="+a,
            data:'req=add_more',
            dataType:'html',
            type:'POST',
            async: false,
            success:function(resp){
                if(resp == 1) {
                $(".emailUniqueCheck").html("Email Already exists.");
                return false;
                } else {
                $(".emailUniqueCheck").html("Proceed.");    
                } 
            },
            error:function(er){
                alert("An error has occured, Please reload/refresh the page and try again.");
            }
        });
}

这里,vaidation 适用于空电子邮件意味着if(a == '') { alert('bla bla'); } 并且页面也不会在单击提交按钮时提交。(根据需要。)

对于 ajax 响应验证工作正常,但只有 return false; 不工作。并提交表单。我尝试了很多东西,但没有用。有谁能帮帮我吗?

【问题讨论】:

  • 尝试发出同步 ajax 请求而不是 async .. 这将阻止您的浏览器等待响应,但您的返回 FALSE 会产生一些影响。
  • 你想说什么???请简要说明。
  • 使用 $.ajax 而不是 $.post。您可以使用 $.ajax 制作 async:false 。如果您希望我修改您的代码以使其正常工作,请告诉我。
  • 查看我编辑的代码....但仍然无法正常工作。问题出在哪里?

标签: javascript php jquery ajax yii


【解决方案1】:
//Since the call is not an asynchronous , you need to return false after ajax call

var isValid = false;
function customValidateemail(messages, id) {
var nameC = '#' + id;
var a = $(nameC).val();
if (a == '') {
    messages.push('Email Id is empty.');
    return false;
}
var email = $("#Registration_user_email").val();
$(".emailUniqueCheck").html('<img alt="Loader" src="/images/loading.gif" />');
$.ajax({
    url: "<?php echo Yii::app()->request->baseUrl;?>" + "/Supplier/checkUniqueEmail?email=" + a,
    data: 'req=add_more',
    dataType: 'html',
    type: 'POST',
    async: false,
    success: funsuccess(),
    error: funerr()
});
return isValid;
 }
function funsuccess(data, textStatus, jqXHR) {
if (data == 1) {
    $(".emailUniqueCheck").html("Email Already exists.");
    return true;
} else {
    $(".emailUniqueCheck").html("Proceed.");
}
isValid = true;
}
 function funerr(err) {  
 alert("An error has occured, Please reload/refresh the page and try  again;
isValid = true;
}

【讨论】:

  • 它进入 funerr() 函数,因为“resp”在所有情况下都未定义.....现在该怎么办?
  • 我已经编辑了答案。 “数据”是内置参数。看到这一行,function,funsuccess(data){}
  • 在代码中看不到任何版本...请解释一下。并且不应该在函数内部使用 isValid 变量?
  • 问题来了?
  • 在函数 customValidateemail() 之外添加成功和错误处理程序。如果仍然出现错误,请检查您的其他 ajax 调用参数(url,data...)是否正确。
猜你喜欢
  • 1970-01-01
  • 2022-11-13
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 2018-06-26
  • 1970-01-01
相关资源
最近更新 更多