[Gelöst] AjaxSubmitButton + FormValidation

Das Thema scheint ja sehr leidvoll zu sein und ich habe es auch schon öfters im Forum gelesen aber keine wirkliche Lösung gefunden.

Ich bin jetzt so weit, dass die success Methode vom Controller einen JSON String in Form von:


{"NodeFormModel_name":["Name darf nicht leer sein."],

"NodeFormModel_type":["Type darf nicht leer sein."],

"NodeFormModel_wheelchair":["Wheelchair darf nicht leer sein."],

"NodeFormModel_lon":["Lon darf nicht leer sein."],

"NodeFormModel_lat":["Lat darf nicht leer sein."]} 

zurückbekommt. Meine Frage ist nun, wie bekomme ich die Fehlermeldungen am einfachsten in die dafür vorgesehenen Errorboxen des Formulars?? Bin ein echter JQuery noob und wäre für jede Hilfestellung dankbar.

Gibt es vielleicht eine fertige Methode dafür oder brauche ich eine Schleife die über das Array iteriert?

Edit: ClientValidation ist auch aktiviert in dem Formular, vielleicht könnte man die Fehler auch anzeigen indem man irgendwie vortäuscht das betroffene Formular verlassen zu haben mit dem Cursor?

Hi,

Ich versteh deine Frage leider nicht ganz: Verwendest du CActiveForm oder ein selbstgebasteltes Standardformular? Weil CActiveForm kümmert sich eigentlich um alle Fehlermeldungen/Validierungen etc. und den JS code der dafür nötig ist. mit einer Syntax a la


$form->error($model,'deinFeldName');

wird zB standardmäßig ein Feld gerendert welches etwaige Fehler des Attributs "deinFeldName" anzeigt. Wenn du ajaxValidation bzw. clientValidation einsetzt müsste das ohne großartige Hacks funktionieren.

Serverseitig kann man zB ajax requests so validieren:




protected function performAjaxValidation($model)

{

    if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')

    {

        echo CActiveForm::validate($model);

        Yii::app()->end();

    }

}



Ich habe genau solch ein Formular, das Problem ist, das validateOnSubmit nicht triggert wenn man einen AjaxSubmitButton benutzt. Ich render das Formular nach absenden nicht neu sozusagen. Deshalb muss ich die Fehlermeldungen manuell anzeigen.

Ah ok, jetzt check ich was du meinst. Mir war gar nicht bewusst, dass es das Problem gibt. Ein Vorschlag den ich diesbezüglich gelesen habe war einen "afterValidate" callback zu definieren welcher die Form abschickt weils ja anscheinend mit dem ajaxSubmitButton selbst nicht klappt. Siehe http://www.yiiframework.com/doc/api/1.1/CActiveForm#clientOptions-detail bzw. hier der Forum Post der den afterValidate Hack erwähnt: http://www.yiiframework.com/forum/index.php/topic/28840-best-practice-for-cactiveform-with-validateonsubmit-and-ajax-submit/page__p__138728__hl__validateOnSubmit+ajax#entry138728

Eventuell hilft das ja mal weiter

Danke für den Tipp, hier ist die Lösung die ich daraus gemacht habe:

Formular:




<?php 

   $form=$this->beginWidget('CActiveForm', array(

			                         'id' => 'node-form',

						 'action' => Yii::app()->request->baseUrl.'/index.php/GameClient/default/playEdit',

   					         'enableClientValidation'=>true,

						 'clientOptions'=>array(

						                        'validateOnSubmit'=>true,

						      		        'afterValidate'=>'js:aftVali'

	                                                                ),)); 

?>

...

...

...

<?php echo CHtml::submitButton('Save', array('id' => 'submitbutton'))?>



JS Function:




function aftVali(form, data, hasError) { 

	if(!hasError) {

		$.ajax({

			  type: 'POST',

			  url: form.attr('action'),

			  data: form.serialize(),

			});

	}

	return false; 

}