Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Recuperare variabile da chiamata asincrona Jquery

    Salve,
    ho uno script php che riceve due actions da una chiamata Asincrona, esegue delel operazioni sul db per recuperare l'id di una riga e lo stampa fuori (la parte in cui stampa è commentata)

    Codice PHP:
    <?php
    require_once('config.inc.php');
    require_once(
    './lib/functions.php');
    require_once(
    './lib/classes.inc.php');
    session_start();

    //DB Connection Handler
    if (isset($_SESSION['user'])) {

    $conn = new mysqli($host,$user,$password,$dbname);
        
    // verifica dell'avvenuta connessione
        
    if (mysqli_connect_errno()) {
                   
    // notifica in caso di errore
                
    echo "Errore in connessione al DBMS: ".mysqli_connect_error();
                   
    // interruzione delle esecuzioni i caso di errore
                
    exit();
     
        }
        else {
            
    // notifica in caso di connessione attiva
            
    if (isset($_REQUEST['action'])) {
                
    $action $_REQUEST['action'];
                switch (
    $action) {
                    case 
    "first":
                    
    $id first_db_id($conn);
                    break;
                    case 
    "next":
                    if(isset(
    $_REQUEST['vid'])) {
                        
    $vid $_REQUEST['vid'];
                        if(
    next_db_id($conn,$vid)) {
                            
    $id next_db_id($conn,$vid);
                        }
                        else {
                            
    $id first_db_id($conn);
                        }
                    }
                    else {
                        
    header('HTTP/1.1 400 Bad Request');
                        die(
    'Nessun ID ricevuto');
                    }
                    break;
                    case 
    "prev":
                    if(isset(
    $_REQUEST['vid'])) {
                        
    $vid $_REQUEST['vid'];
                        if(
    prev_db_id($conn,$vid)) {
                            
    $id prev_db_id($conn,$vid);
                        }
                        else {
                            
    $id first_db_id($conn);
                        }
                    }
                    else {
                        
    header('HTTP/1.1 400 Bad Request');
                        die(
    'Nessun ID ricevuto');
                    }
                    break;
                    
                    default:
                    
    header('HTTP/1.1 400 Bad Request');
                    die(
    'Azione inattesa');
                    break;

                    
                    
                }
    // end switch
                            /*Qui stampa l'id richiesto*/
                
    echo $id;
            }
        }

    $conn->close();
    }
    // first IF

    else {
        die(
    'Nessuna sessione avviata');
    }

    ?>
    Ora ho la chiamata ajax che quando l'operazione ha successo dovrebbe ritornarmi in una variabile l'id stampato dal php:
    codice:
    function getSongId(action,songID){
    	var data = "action="+action+"&vid="+songID;
    	$.ajax({
    		url:"idsong.php",
    		data:data,
    		error: function (richiesta,stato,errori){
    			alert('Impossibile caricare il prossimo video');
    		},
    		success:function (php) {
    			return php;
    
    
    		}
    	});
    	
    }
    Ora se in una pagina provo a fare questo:
    codice:
    var sID = getSongId('first',null);
    alert(sID);
    Mi risulta che la variabile è undefined.

    Mentre se modifico così la chiamata ajax
    codice:
    function getSongId(action,songID){
    	var data = "action="+action+"&vid="+songID;
    	$.ajax({
    		url:"idsong.php",
    		data:data,
    		error: function (richiesta,stato,errori){
    			alert('Impossibile caricare il prossimo video');
    		},
    		success:function (php) {
    			alert(php);
    
    
    		}
    	});
    	
    }
    E nella pagina di test scrivendo:
    codice:
    getSongId('first',null);
    mi stampa correttamente l'alert con all'interno l'id giusto.
    Io però avrei bisogno di passarmi quell'id in una variabile da usare in altre chiamate ajax. Cosa sbaglio?

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    quella funzione in success non viene eseguita contemporaneamente a getSongId, non puo' ritornare nulla

    devi rivedere la logica delle operazioni: se dopo questo success devi fare altro con i valori ottenuti e' compito di quella funzione in success richiamare un' altra funzione con quei valori

  3. #3
    Ti ringrazio per la risposta. Quindi in success per rendere utilizzabili i dati cosa sarebbe meglio fare? Non posso uscire dall'"involucro" della chiamata Ajax con quei dati. Come faccio a "esportarli" per utilizzarli con altre funzioni?

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    codice:
    success:function (php) {
    			tuafunzione(php);
    
    
    		}
    function tuafunzione(valore){
    faccio quello che mi serve.....
    }
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Ok ho capito anche se sta cosa non mi piace per niente . In success posso recuperare le variabili passate a getSongId(action,songID) ?
    Più che altro mi interesserebbe l'action!

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da tidusuper91
    Ok ho capito anche se sta cosa non mi piace per niente .
    Non ne capisco il motivo, ma avari i tuoi perché
    In success posso recuperare le variabili passate a getSongId(action,songID) ?
    Più che altro mi interesserebbe l'action!
    Si, oppure esegui una nuova chiamata ajax direttamente in success
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    Originariamente inviato da tidusuper91
    In success posso recuperare le variabili passate a getSongId(action,songID) ?
    Più che altro mi interesserebbe l'action!
    si', "action" e' ancora nello scope di quella funzione

  8. #8
    Ok. In parte ho risolto.
    Il problema è che quella funzione serve per recuperare gli id dal database di canzoni.
    Nel caso l'action sia 'first' getSongId mi prende la prima id del database, e fin qui nessun problema perchè farei:

    codice:
    function getSongId(action,songID,div){
    	var data = "action="+action+"&vid="+songID;
    	$.ajax({
    		url:"idsong.php",
    		data:data,
    		error: function (richiesta,stato,errori){
    			alert('Impossibile caricare il prossimo video');
    		},
    		success:function (php) {
    			loadSong(php,div);
    
    		}
    	});
    	
    }
    dove loadSong è una funzione che mi carica il codice associato a quel id all'interno del div che io gli imposto.

    ll problema sorge quando dò l'azione 'next'. Con tale azione getSongId necessita di un songID di cui darmi il successivo id.
    Mi spiego meglio:

    L'utente preme il pulsante di Play, getSongid viene chiamato così
    codice:
    getSongid('first',null,'#div-container');
    e viene caricato correttamente il primo video musicale.
    Il problema sorge quando l'utente clicca next. Io dovrei memorizzare l'id del video corrente all'interno di qualcosa ogni volta che viene chiamata getSongId (nelle mie intenzioni quel qualcosa era una variabile) così al momento del next (o del prev) recupero quell'ID lo dò in pasto a getSongId('next',ID,div) e carico il secondo video.

    Come capirete il problema è memorizzare l'id corrente a seguito della chiamata di getSongId. Devo passare per le sessioni o per i cookies?

  9. #9
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    allora tutto quello che cerchi e' una variabile globale

    inizializzala fuori da qualsiasi funzione e risettala quando vuoi

    var tuaVar=false;

    function tuaFunzione(bla){
    tuaVar=bla
    }

  10. #10
    Perfetto. Funziona. 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.