Non Mi Va L'invio Del Form Con Ajax

Io non ho ancora avuto problemi con il captcha di Yii.

ok allora lo provo

chiedo ancora qui :P

allura… la validazione lato client funziona.

da quel che ho capito enableAjaxValidation è solo la validazione via ajax, non l’invio del form e l’aggiornamento della lista dei commenti. giusto?

Io ora vorrei fare una cosa:

  1. come è ora che valida i campi lato client con :



'enableAjaxValidation'=>false,

'enableClientValidation' => true,



2)se i dati nel form sono corretti (validati lato client) me li invia, però vorrei me li inviasse in ajax, cosi da non ricaricare la pagina e mostrare gli errori se ce ne sono altrimenti mostrare il messaggio (al posto del form) di invio avvenuto e aggiornare la lista dei commenti (senza ricaricare la pagina), cosi da visualizzare il commento appena inserito.

bene… per fare questo… posso farlo con il CHtml::submitButton o devo usare CHtml::ajaxSubmitButton?

Quando si tratta di ajax vado di metodo classico. Non considero il form, creo un bottone e vado di jquery. In questo modo in genere non sbaglio.

ah si infatti prima di usare yii facevo sempre cosi anchio… pensavo ci fosse qualcosa di più veloce con yii

per fare una cosa di questo tipo devi cambiare concetto,

non puoi più fare un submit della form

ma devi mandare la form tramite funzione js apposita, con un serialize() per catturare i campi, su una action che risponda per la funzione js stessa.

qui un wiki, anche se molto ce l’hai già (segui l’ultima parte)

http://www.yiiframework.com/wiki/388/ajax-form-submiting-in-yii/

allora ho fatto tutto e ora funziona tutto.

Chiedo un piccolo aiuto ora. Questa è la mia chiamata ajax se non ci sono errori nella validazione lato client

(ci sono dei commenti, quindi spero si capisco cosa faccio)




var urldata=$("#comment-form").serialize();

$.ajax({

			type: 'POST',

			url: '<?php echo Yii::app()->getRequest()->getUrl(); ?>',

			data:urldata+"&ajax=comment-form",

			success:function(msg){

				$('.blogwcommentwrap2').empty(); //tolgo il form

				$('.blogwcommentwrap2').html(msg); //mostro il messaggio di invio con successo

			},

			error: function(msg) { // if error occured

				alert('Errore');

			},			 

			dataType:'html'

		});



ora io nella pagina ho la lista dei commenti renderizzata con questo:




<?php

			$dataCommenti=$model->Commenti;

			$totcomm=$model->commentCount;

						

			$this->widget('zii.widgets.CListView', array(

				'dataProvider'=>$dataCommenti,

								

				'viewData'=>array('totCom' => $totcomm, 'post'=>$model),

											

				'itemView'=>'_comments',

				'template'=>"{items}\n{pager}",

								

				'enablePagination' => true,

								

				'pagerCssClass'=>'blogpager',

				'summaryCssClass'=>'blogsommario',

				'itemsCssClass'=>'blogitem',

								

				'emptyText'=>'',

								

				'pager'=>'application.widget.MyPager',

			));

			?>



questo come sapete crea un div con class="list-view" che contiene il codice presente al file _comments.

Io vorrei aggiornare il div creato dal widget CListView per mostrare il nuovo commento, solo che non so come fare…

avevo pensato di aggiungere nel success dell’ajax


$('.list-view').remove();

così da levare i commenti e sostituirli con quelli nuovi. Ma come fare?

Si può annidare una seconda chiamata $.ajax all’interno del success della prima chiamata $.ajax? Cosi da rigenerare i dati e poi appenderli nell’HTML della pagina? Sapete darmi un aiuto’ grazie

mi rispondo da solo :lol:

nell’ajax dello script




$.ajax({

                        type: 'POST',

                        url: '<?php echo Yii::app()->getRequest()->getUrl(); ?>',

                        data:urldata+"&ajax=comment-form",

                        success:function(msg){

                                $('.blogwcommentwrap2').empty(); //tolgo il form

                                $('.blogwcommentwrap2').html(msg); //mostro il messaggio di invio con successo

                                $.fn.yiiListView.update('#IDLISTA'); //AGGIUNTA

                        },

                        error: function(msg) { // if error occured

                                alert('Errore');

                        },                       

                        dataType:'html'

                });



ho aggiunto al success:


$.fn.yiiListView.update('#IDLISTA');