Yii Framework Forum: [Risolto] Problema Ajax Dopo Delete - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Risolto] Problema Ajax Dopo Delete due eventi ajax all'interno della stessa view... Rate Topic: -----

#1 User is offline   tune 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 75
  • Joined: 27-March 12

  Posted 17 December 2012 - 10:08 AM

Ciao ragazzi,
sono alle prese con "delete" e l'ajax che ne sussegue...
mi spiego meglio:
sò qual'è il giro che fà il delete, cancellando il model selezionato e tornando alla pagina senza ricaricarla appunto,
ma il mio dubbio è un altro, ovvero, anche dopo aver letto questo wiki il flusso è stato confermato.
ma per ovvi motivi l'esempio del wiki riporta in ajax una semplice stringa del tipo "Cancellazione effettuate correttamente" etc etc...ma se io dovessi ritornare un'intera pagina, o vista per l'appunto ceh è necessario stampare dentro un div della pagina madre, qual'è il modo migliore per farlo?

...io dalla mia ho praticamente preso l'html della view desiderata l'ho popolata tramite php e poi "printata" in modo da farla catturare...

per dirla tutta all'interno della mia vista ci sono due "pulsanti" che attivano la chiamata ajax che poi riprinta la stessa view...e sono
  • il delete standard di Yii
  • un pulsante che associa l'utente alla pratica in esame
ora il problemone è che se associo l'utente tutto è ok, ma se poi vado subito dopo l'operazione a cancellarne uno magari associato precedentemente torna blank e non visualizza niente...(ma se refresho la pagina e cancello tutto funziona)

domanda:

  • è possibile, in fase di settaggio dell'attributo "update" delle opzioni ajax "url-decodificare" il data di ritorno?[es. 'update'=>'js:urldecode(data)'] ?
  • possibile che essendoci due eventi nella stessa view che a fine "lavoro" comunque riportano lo stesso html ma aggiornato, portino problemi che richiedano l'uso di moetodi tipo "live" o "on" di jQuery?



grazie in anticipo, scusate la lunghezza ma volevo spiegare la cosa, spero di esermi fatto capire.

ps, vi posto l'immagine che spiega com'è divisa la vista che associa l'utente alla pratica e volendo ne toglie altri tramite l'elenco... https://docs.google....MjZKejllSVUzZ0E
0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 17 December 2012 - 10:39 AM

Io non ci ho capito niente.
0

#3 User is offline   tune 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 75
  • Joined: 27-March 12

Posted 17 December 2012 - 10:58 AM

allora,
la pagina contiene una vista "pratica.php" al suo interno c'è un tab che raccoglie la vista "esecutori.php".
gli esecutori sono utenti che possono essere associati alla pratica.
quindi il tab "ESECUTORI" conterrà la lista degli esecutori già associati alla pratica e la possibilità di associarne altri.
come si vede dall'immagine

ora, sia la cancellazione che l'associazione avviene in ajax.

quindi cancellando un untete dalla lista non ci sono problemi perchè Yii si prende cura di tutto e ricarica la vista.

mentre per avere lo stesso risultato con l'associazione(insert e ricaricamento in ajax) ho scritto un ajaxButton così:

			<legend>Aggiungi esecutore alla verifica</legend>
			<span id="select_esecutore_container">
				<?php 
				print CHtml::dropDownList( 
					'select_esecutore', null,
					Esecutori::getListaEsecutori($model->sequ_idverifica),
					array('id'=>'select_esecutore'));
				?>
			</span>
			<?php	
			print "&nbsp;";
			//*** ASSOCIA ESECUTORE Ajax
			print CHtml::ajaxButton(
				'Associa esecutore',
				Yii::app()->createUrl("verifiche/associaEsecutoreVerifica"),
				array(
					'success'=>'function(data){
							$(\'#esecutori_tab\').html(
							decodeURIComponent((data+\'\').replace(/\\+/g, \'%20\')));
						}',
					'type'=>'POST',
					'data'=>array(
						'associa_esecutore'=>'js:$(\'#select_esecutore\').val()',
						'id_verifica'=>$model->sequ_idverifica),
				)
			);
			?>


se ci fate caso sull'attributo "success" di ajax nel pulsante c'è "function(data)...", data in questo caso è praticamente un HTML url-encoded...della stessa vista "esecutori.php" (di fatto la riaggiorna con i nuovi dati) infatti lo decodifico.

Il problema è che una volta "associato" un nuovo utente, lui lo aggiunge e riprinta la vista correttamente, solo che se poi cancello un utente dall'elenco torna blank.

quindi: come è possibile gestire due eventi ajax nella stessa vista?
grazie.
0

#4 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 17 December 2012 - 01:04 PM

Devi scusarmi ma continuo a non capire. Cosa intendi con "se poi cancello un utente dall'elenco torna blank". Cosa torna blank, e dove?

Sarebbe molto semplice dire:

  • cosa voglio fare;
  • cosa mi aspettavo;
  • cosa invece ho ottenuto;


Se non fai questa distinzione, continui a focalizzarti su qualche soluzione esotica senza capire davvero quale sia il problema.
0

#5 User is offline   tune 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 75
  • Joined: 27-March 12

Posted 18 December 2012 - 04:17 AM

Ok, capisco che ho messo troppa carne sul fuoco, e ti ringrazio di seguire questo post...
faccio un passo indietro,
ti rispondo punto per punto:

  • cosa voglio fare: creare una vista che presenti due cose,
  • una lista di utenti
  • la possibilità di aggiungerne altri
  • cosa mi aspettavo: mi aspettavo che fosse possibile creare entrambi i flussi (cancellazione e associazione degli utenti) utilizzando ajax
  • cosa invece ho ottenuto: ho ottenuto una pagina che non riesce a far coesistere entrambe i flussi ajax.

domanda: come è possibile creare una pagina che possa ospitare due eventi ajax?

i due eventi ajax sono la cancellazione degli utenti, presente ad ogni riga della tabella della lista degli utenti, e poi l'associazione dell'utente tramite un "ajaxButton".

Spero di essermi spiegato stavolta,
comunque Grazie ancora!
0

#6 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 18 December 2012 - 04:34 AM

Ciao,
firebug cosa ti dice? tutto normale o evidenzia errori/avvisi etc?
0

#7 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 18 December 2012 - 04:40 AM

Provo a spiegarmi meglio: ogni tanto arrivano persone poco avvezze al gergo informatico che ci dicono "il pc non funziona". Ovviamente noi non capiamo. Io in questo momento non sto capendo. Non ho informazioni per farlo.

L'unica cosa che posso intuire, è che tu abbia una vista che modifichi con due eventi ajax. Questa vista, però, viene modificata via ajax e quando si scatena un evento, le modifiche dell'altro vengono perse. Per risolvere la cosa, devo fare in modo che la vista si costruisca sempre indipendentemente da quale sia l'evento ajax scatenato.
0

#8 User is offline   markux 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 106
  • Joined: 26-November 10
  • Location:Grosseto

Posted 19 December 2012 - 02:12 AM

prova ad utilizzare nel success:

$.fn.yiiGridView.update("id-tua-cgridview");

oppure la soluzione più semplice è far ricaricare la pagina con window.location.reload().
0

#9 User is offline   tune 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 75
  • Joined: 27-March 12

Posted 19 December 2012 - 03:25 AM

grazie ragazzi,
alla fine il problema, è al 90% dovuto al fatto che il mio "ajaxButton" và a sostituire completamente l'html della vista compromettendo evidentemente qualche elemento, o comunque cambiando dinamicamente i riferimenti degli elementi del DOM.

comunque ho "risolto" lasciando soltanto il delete come evento ajax, mentre l'altro evento l'ho trasformato in un semplice link con i parametri in get.

cmq ora proverò le vostre idee e nel caso vi farò sapere.
0

#10 User is offline   tune 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 75
  • Joined: 27-March 12

Posted 19 December 2012 - 04:40 AM

Ciao Markux,
effettivamente la tua soluzione funziona!
$.fn.yiiGridView.update("esecutori_grid")


ma siccome l'update presuppone che ci sia già presente nella pagina la griglia da aggiornare,
io potenzialmente ho delle pratiche in cui non ci sono utenti associati:
if(<ci sono utenti>){
...stampa la grid...
}else{
'non ci sono utenti associati'
}


quindi l'update funziona per le griglie già presenti, ma purtroppo io non sempre ce le ho...
0

#11 User is offline   tune 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 75
  • Joined: 27-March 12

Posted 19 December 2012 - 06:13 AM

Scusate il doppio post,
cmq ho provato a sviluppare anche l'altro consiglio, quello de reload(),
alla fine ho optato proprio per quest'ultimo, e tutto funziona.
ecco di nuovo il mio ajaxButton che nel success fà un rerfresh della pagina:
                    	//*** ASSOCIA ESECUTORE Ajax
                    	print CHtml::ajaxButton(
                            	'Associa esecutore',
                            	Yii::app()->createUrl("verifiche/associaEsecutoreVerifica"),
                            	array(
                                    	'success'=>'function(){
	                                			window.location.hash = \'#esecutori_tab\';
	                                			window.location.reload(true);
                                    		}',
                                    	'type'=>'POST',
                                    	'data'=>array(
                                            	'id_esecutore'=>'js:$(\'#select_esecutore\').val()',
                                            	'id_verifica'=>$model->sequ_idverifica),
                            	)
                    	);


l'unico accorgimento che ho inserito è l'aggiunta dell'attributo "hash" dell'oggetto "Location" per far sì che refreshando la pagina mi si posizioni nel tab desiderato, vedi qui per specifiche sull'oggetto location.

...comunque Grazie a tutti, :rolleyes:
ciao!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users