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

    Funzione per fermare il submit di un form

    Salve a tutti!
    Cosa c'è di sbagliato nello script seguente?
    codice:
    function controlla_cliente(){
    	var id = $('#id').attr('value');
    	if(id != ''){
    	   $.ajax({
    	     type: "POST",
    	     url: '<?=base_url()?>clienti/ctrl_cliente_add',
    	     data: 'id_cliente='+id,
    	     dataType: 'text',
    	     success: function(result)
    	      	{
    	     		if(result > 0){
    		  		console.log('doppio cliente');
    				return false;	
    	  		}else{
    		  		console.log('Cliente inserito');
    	  		}//else if
    	     }//success
    	   })//ajax
    	}//if
    }//function
    questa funzione viene richiamata da un form che ha come attributo onsubmit = "return controlla_cliente();", dovrebbe controllare che l'id del cliente non sia già inserito nel db e nel caso sia presente fermare i submit del form.
    La pagina a cui fa riferimento la chiamata ajax controlla appunto se esiste l'id inserito e ritorna 1 se ha trovato un record e 0 se non ha trovato nessun record con l'id richiesto(questa parte, in php, è testata e funzionante, anche perchè l'ho utilizzata in un altra parte dell'applicazione e non da nessun problema), uel <?=base_url()?> invece è una funzione di un fw php(codeigniter), anche questa funzionante perché usata in altre chiamate ajax.
    Sapreste indicarmi l'errore?
    Grazie mille in anticipo!
    Saluti Satore11

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Come primo cambierei il datatype in 'html' se anche così non risolvi forzerei il result in numerico con un parseInt(result) così da essere sicuro del controllo if
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    105
    Grazie mille per la risposta!
    Ma...niente da fare, ho cambiato il dataType in html(avevo già provato è rimasto in text tra le varie prove che ho fatto), con il parseInt() di result non funge neanche, non riesco a capire. eppure se metto un return false alla fine prima di chiudere la funzione stessa mi blocca il submit del form e mi stampa in console il risultato dell'if all'interno della richiesta ajax, quindi fin li funziona tutto, c'è qualche problema con il return false(penso), ho provato a metterne di altri, a scambiarli ma niente!

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    105
    Salve, ho semplificato al massimo il codice ma mi da sempre problemi:
    codice:
    var prova;
    function controlla_cliente(id){
    	//var id = $('#id').attr('value');
    	if(id != ''){
    		$.ajax({
    			  type: 'post',
    			  url: '<?=base_url()?>clienti/ctrl_cliente_add',
    			  data: 'id_cliente='+id,
    			  dataType: 'text',
    			  success: function(msg){
    				  alert('msg: '+msg);
    				  prova = false;
                                      return false
    				  }
    			  });
    	        alert('id = '+id);
    	        alert('prova = '+prova);
    	}//if
    }//function
    ho modificato il form:
    codice:
    <form onsubmit="alert('ritorno del form: '+controlla_cliente($('#id').attr('value')));return false" ...>
    risposta in ordine e loro risultati:
    1) id: questo funziona
    2) prova: undefined
    3) ritorno del form: undefined
    4) msg: 1
    In pratica gli alert non seguono l'ordine dello script!?
    all'interno della funzione ajax non posso modificare le variabili? Neanche quelle globali?
    Perché? Qualcuno mi aiuta a capire l'errore?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ajax = Asynchronous JavaScript and XML

    asincrono quindi non segue l'ordine dello script, puoi modificare quello che preferisci all'interno della callback(success), ma le modifiche verranno effettivamente applicate solo quando il server ha terminato l'elaborazione della chiamata ajax, è il comportamento standard.
    Ora quello che devi fare è bloccare sempre il submit(return false, ma non dentro il success, li non serve a nulla) e effettuare il submit con js (form.submit()) all'interno del success, cioè quando hai ottenuto la risposta dal server.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    105
    OK! Grazie mille per la dritta!
    Buona giornata

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.