Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Problema variabile

  1. #1
    Utente di HTML.it L'avatar di Gin7
    Registrato dal
    Feb 2011
    Messaggi
    92

    Problema variabile

    Buongiorno, non riesco a trovare l' errore in questo piccolo script, il problema è legato al passaggio di una variabile tra funzioni. Nonostante mi sia assicurato che la variabile sia globale non ritrovo la variabile. Ecco il codice:
    codice:
    var reservedArr;
    function getidRef(input) {
            if($('#idRef').length != 0) var idRef = $('#idRef').val();
    		$.getJSON('ajax/reservation.php?idRef='+idRef, function(data) {
    			$.each(data, function(key, val) {
    				reservedArr = ['"'+val.checkIn+'", "'+val.checkOut+'"'];
    			});
    		});
    		alert(reservedArr); //questo alert mi restituisce undefined
    	}
    Ringrazio anticipatamente, buona domenica

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    A) meglio non avere variabili identiche agli oggetti del documento
    if($('#idRef').length != 0) var idRef = $('#idRef').val();
    su questo pezzo ho forti dubbi
    if($('#idRef').length != 0) var idRef = $('#idRef').val();
    se idRef è un input text nell if ci vuole .val().length oppure devi cambiare la variabile successiva, in oltre la chiamata $.getJSON restituisce una risposta valida e corretta?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it L'avatar di Gin7
    Registrato dal
    Feb 2011
    Messaggi
    92
    Ciao, innanzi tutto ti ringrazio per i consigli che già mi hai dato
    Riguardo la chiamata.. si, la risposta è corretta..infatti se metto l' alert, ad esempio, dentro il ciclo "each" il risultato è giusto

  4. #4
    Utente di HTML.it L'avatar di Gin7
    Registrato dal
    Feb 2011
    Messaggi
    92
    Ho modificato un po il codice. Il problema è sempre lo stesso:
    codice:
    $(function() {
    		var cIn = [], cOut = [];
    		
    		$.getJSON("ajax/reservation.php?idRef=34",
    			function(data) {
    				for (x = 0; x < data.length; x++) {
    					cIn.push(data[x].checkIn);
    				}
    				alert(cIn.length); //risultato corretto
    		})
    		alert(cIn.length); //array vuoto
    })
    Appena dunque esco dalla funzione di getJson (success), l' array si svuota... o comunque non viene modificato correttamente.
    Qualche suggerimento?

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Secondo me ricevi dati sbagliati (anche il solo json scorretti e non interpretabili da jquery può bastare) da ajax/reservation.php metti degli alert per vedere cosa ricevi. http://api.jquery.com/jQuery.getJSON/
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Utente di HTML.it L'avatar di Gin7
    Registrato dal
    Feb 2011
    Messaggi
    92
    No, purtroppo li ricevo correttamente:
    codice:
    var cIn = [], cOut = [];
    $.getJSON("ajax/reservation.php?idRef=34", function(data){
    			for (x = 0; x < data.length; x++) {
    				alert(data[x].checkIn);
    				alert(data[x].checkOut);
    			}
                            alert(cIn.length); //risultato corretto
    		})
    		.error(function() { alert("error"); });
                    alert(cIn.length); //risultato non corretto
    In particolare, l' array che invio tramite PHP è questo:
    codice:
    [{"checkIn":"05-05-2012","checkOut":"05-12-2012","days":"7"},{"checkIn":"05-18-2012","checkOut":"05-20-2012","days":"2"}]

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    l'array è vuoto perche viene eseguita prima l'istruzione successiva(l'alert) e dopo il "success" con conseguente riempimento dell'array. Il success viene richiamato solo quando il server ha finito di elaborare i dati e li ha restituiti, l'alert viene invece eseguito appena dopo aver effettuato la chiamata ajax, è un comportamento standard.

  8. #8
    Utente di HTML.it L'avatar di Gin7
    Registrato dal
    Feb 2011
    Messaggi
    92
    Ciao, intanto ti ringrazio per la risposta. Stanotte sono giunto ad una conclusione simile, che il codice all'interno della function ( success di getJSON) viene eseguito dopo. Non sono però riuscito a risolvere il problema, l'unica cosa che mi è venuta in mente è di richiamare la funzione esternamente. Ma non ci sono riuscito. Potreste darmi un altro suggerimento in proposito? ringrazio

  9. #9
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Tutto ciò che dovrà utilizzare o tenere conto del responso di XMLHttpRequest dovrà essere inserito all'interno della funzione. Si chiama uso "asincrono" non per niente (viene eseguito dopo, come hai detto tu; e non hai modo di sapere quando: quando è pronto, punto e basta)... Non hai alternative.

  10. #10
    Utente di HTML.it L'avatar di Gin7
    Registrato dal
    Feb 2011
    Messaggi
    92
    Ahahah bellissima la crudezza con cui mi hai spiegato l' "asincronia"
    Allora posso chiederti come usciresti da quello che per me sta diventando quasi un rompicapo?
    la situazione è questa:
    Ho inserito, nella pagina, un calendario datepicker di Jquery. Devo segnare alcuni range di date, prese dal database (che è quello che sto cercando di fare).
    La situazione nel js è la seguente:
    codice:
    $(document).ready(function() {
     ....funzioni varie estranee a questo problema....
     $(function() {
    		var reservationsList = []; // array che conterrà altri array, con i range
    		var id;
    		
    		function getId() { //la funzione prende l' id a cui si devono riferire le date. Da correggere con le segnalazioni di cavicchiandrea
    			if($('#idRef').length != 0) {
    				id = $('#idRef').val();
    			}
    		};
    		
    		$.getJSON("ajax/reservation.php?idRef="+id, {}, getReservations);
    
                   function getReservations(reservations) {
                     for (x = 0; x < list.length; x++) {
                          reservation = ['"'+reservations[x].checkIn+'", "'+reservations[x].checkOut'"];
    		      reservationsList.push(reservation);
    	          }
                   };
    		
    	        function checkReservation(date){
                            //qua dentro mi serve l' array reservationsList, per poter controllare la data
    			return [true]; //per il momento è presente solo questo
    		};
    		
    		$( "#datepicker" ).datepicker({
    			//...parametri vari...
    			beforeShowDay: checkReservation
    		});
    	});
    
           ....altre funzioni varie estranee al problema....
     
    }
    Forse è una cavolata, ma dovrei mettere checkReservation dentro il success di jetJSON? se si... poi come la richiamo?

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.