Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    340

    Ajax dopo la chiamata php, è possibile un reload?

    Ciao ragazzi, nuovamente a chiedervi una mano
    Ho un problema con uno script che funziona tutto per benino ma mi servirebbe un reload dopo la chiamata ajax post.
    Potrei farlo temporizzando ma ho provato, è brutto perchè la pagina riparte dall’header.
    uno script php aggiorna mysql e mette a disposizione dei campi da affittare
    delle checkbox permettono di selezionare gli orari liberi.
    cliccando la checkbox prescelta esegue la chiamata ajax, questa rimanda a somma.php
    che aggiorna il db e prenota l’orario, tutto funziona senza problemi.
    il mio problema è che dopo l’aggiornamento dovrei eseguire un reload per poter rileggere il db e impostare su impegnato l’orario appena scelto.
    Cosa che fà se eseguo F5, ma è brutto dovrebbe essere automatico dopo l’aggiornamento.
    Mi potete dire se è possibile un reload dopo la chiamata?
    Posto la parte interessata.
    codice:
    <script language="javascript">
    
    sport='';
    idcampo='';
    ora1='';
    ora2='';
    giorno='';
    prezzo ='';
    
    function cliccato(quale)
    {
    	s =quale.value;
    
    
     if (quale.checked)
       { 
    	  var dati  = s.split("-");
    	
    	 myVar=confirm("Stai prenotando per :\n" +
    				   dati[0] +" campo numero " +dati[1] +"\n" +
    				   "per il giorno " + dati[4] + " dalle ore "+dati[2] + 
    				   " alle ore "+dati[3] +" al prezzo di €. "+dati[5]+ "\n\n Confermi ?");
    	 
    	  if(myVar=="0")
    		 {
    		 document.theForm.scelto.disabled = true;
    	}else{
    	 
    		if(document.getElementById) { 
    			sport =  document.getElementById("sport").value ;
    			idcampo = document.getElementById("idcampo" ).value ;
     			ora1 = document.getElementById("ora1").value ;
    			ora2 = document.getElementById("ora2").value ;
    			giorno = document.getElementById("giorno").value ;
    			prezzo = document.getElementById("prezzo").value ;
    		}
    	   		document.getElementById("sport").value= dati[0] ;
    			document.getElementById("idcampo").value= dati[1] ;
    			document.getElementById("ora1").value= dati[2];
    	        document.getElementById("ora2").value= dati[3] ;
    	        document.getElementById("giorno").value= dati[4] ;
    	        document.getElementById("prezzo").value= dati[5] ;
    		 }
    	  }
      	
    	
    	if(myVar>0) 
    	{
    		inviaXHR(obj,"somma.php");
    	
    		}
    	
    }
    </script>
    
     
            
    <script>
    function istanzaXHR() {
    	var obj;
    	if (window.XMLHttpRequest) {	// Non Internet Explorer
    		obj = new XMLHttpRequest();
    	} else if (window.ActiveXObject) { // Internet Explorer
    		obj = new ActiveXObject("Microsoft.XMLHTTP");
    	}
    	return obj;
    }
    
    obj=istanzaXHR();
    
    function onStateChange() {	// Cambiamento Stato
    	if (obj.readyState == 4) { // Caricamento Avvenuto
    		if (obj.status == 200) { // con successo
    			document.getElementById("risultato").innerHTML=obj.responseText; // risultato
    		} else {
    			document.getElementById("risultato").innerHTML="nessuna scelta valida.";
    			alert("Errore: "+obj.statusText);
    		}
    	}	
    }
    
    
    function inviaXHR(obj,url) {
    	try {	
    		obj.open("POST", url, true);	// apro la comunicazione
    		document.getElementById("risultato").innerHTML="...";  
    		obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    		obj.onreadystatechange = onStateChange;
    		ora1=escape(document.theForm.ora1.value);	 
    		ora2=escape(document.theForm.ora2.value);	 
    		giorno=escape(document.theForm.giorno.value);	 
    		idcampo=escape(document.theForm.idcampo.value);	 
    		sport=escape(document.theForm.sport.value);	 
    		prezzo=escape(document.theForm.prezzo.value);	 
    
    		obj.send("idcampo="+idcampo+"&ora1="+ora1+"&ora2="+ora2+"&sport="+sport+"&giorno="+giorno+"&prezzo="+prezzo);	// Trasferimento dati a somma.php per aggiornare mysql.
    	} catch (e) {
    		document.getElementById("risultato").innerHTML=" Nessuna scelta valida!";
    		alert("Errore: "+e);
    	}
    	
    }
    </script>

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ajax viene usato proprio perche permette la comunicazione tra client e server senza ricaricare la pagina, tu vuoi utilizzare ajax pero vuoi anche effettuare il reload, capisci che non ha alcun senso.

    il mio problema è che dopo l’aggiornamento dovrei eseguire un reload per poter rileggere il db e impostare su impegnato l’orario appena scelto.
    Cosa che fà se eseguo F5, ma è brutto dovrebbe essere automatico dopo l’aggiornamento.
    Non devi effettuare il reload, quando effettui la chiamata ajax fatti tornare dal server i dati del db. Oppure non utilizzare ajax e fai una semplice chiamata GET/POST

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    340
    Grazie Vindav, in effetti usare ajax in questo caso è anomalo, ma non ho altro modo
    per andare ad aggiornare il db al click della checkbox, altrimenti dovrei usare un submit per richiamare lo script in post o get.
    Pero' ho risolto , dopo la selezione del checkbox avviene correttamente l'impegno sul database e ora eseguo il reload da ajax, con la banalissima window.location.reload()
    codice:
    function onStateChange() {	// Cambiamento Stato
    	if (obj.readyState == 4) { // Caricamento Avvenuto
    		if (obj.status == 200) { // con successo
    			document.getElementById("risultato").innerHTML=obj.responseText; // risultato
    			window.location.reload(true);
    			
    		} else {
    			document.getElementById("risultato").innerHTML="anomalia in risposta server";
    			alert("Errore: "+obj.statusText);
    		}
    	}	
    }
    non sarà bello però funge lo stesso.

    Grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    non ho dubbi che funzioni ma come ti ho già detto il reload è inutile puoi fare tutto con ajax


  5. #5
    Asynchronous
    J
    A
    X

    stai andando contro il principio di ajax
    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    340
    Certo, so che è contro il principio e la funzionalità di Ajax, ma devo consegnare così per ora, intanto ci studio su e vedo come fare per riprendere la routine di lettura e creazione delle checkbox senza il reload, grazie ragazzi!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.