2015-07-27 2 views
-2

Я хочу установить проверку уникального идентификатора электронной почты в yii, но он не работает должным образом, поэтому в чем проблема. мой код формы, как показано ниже:return false not works for ajax success function in yii

<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> 

мой Аякса код, как показано ниже:

<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; не работает. и форма подает. Я пробовал много вещей, но не работал. так может кто-нибудь мне помочь?

+0

Попробуйте сделать синхронный запрос Ajax вместо асинхронного .. Это будет блокировать ваш браузер ждет ответ, но ваше возвращение FALSE будет иметь какой-то эффект. – Svetoslav

+0

что вы пытаетесь сказать ??? пожалуйста, объясните кратко. –

+0

используйте $ .ajax вместо $ .post. Вы можете сделать async: false, используя $ .ajax. Дайте мне знать, если вы хотите, чтобы я изменил ваш код для правильной работы. –

ответ

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; 
} 
+0

он работает в функции funerr(), потому что «resp» не определено для всех случаев ..... что теперь делать? –

+1

Я отредактировал ответ. 'data' - встроенный параметр. См. Эту строку, функцию, funsuccess (данные) {} –

+0

не может видеть никаких выпусков в коде ... pls объясняет. и не должна ли переменная isValid внутри функции? –