[Javascript] Funzione Errata procedura

max1974

Utente Attivo
7 Mar 2013
107
0
16
Salve ragazzi ho una funzione per il controllo delle autorizzazioni in apertura pagina che legge le autorizzazioni utente scritte nel db.
Questa qui:
Codice:
function autor(local,page){
    //controllo se utete abilitato a questa pagina ed il modo di abilitazione
    console.log("step-1a="+local);
  $.ajax({
       url:"php/ajax_aut.php",
       method:"POST",
       data:{pages:local},
       dataType:"json",
       success:function(data){
       //fare controllo pagina che posizione è
       var $posizione=data.posizione;
       var $char=sessionStorage.getItem("Autor")[$posizione-1];
       console.log("step-1b"+$char);
       var $user_mode = "";
       switch($char) {
            case '0'://NON AUTORIZZATO
              $user_mode = 'no-control';
            break;
            case '1'://AUTORIZZATO USER
              $user_mode = 'control-users-user';
            break;
            case '2'://AUTORIZZATO EDITOR
              $user_mode = 'control-users-editor';
            break;
            case '3'://AUTORIZZATO ADMIN
              $user_mode = 'control-users-admin';
            break;
            default:
              $user_mode = 'no-control';
            break;
          }
          console.log("step-1c"+$user_mode);
          if ($user_mode == 'no-control' && page !="index"){
              var notify = Lobibox.notify('error', {
                  title: 'AUTORIZZAZIONE',
                  msg: 'Non sei autorizzato ad accedere a questa pagina, contattare AMMINISTRATORE di Sistema, a breve verrai reindirizzato alla "DASHBOARD"',
                  showClass: 'fadeInDown',
                  hideClass: 'fadeUpDown',
              });
              window.location.href = "#blank";
              setTimeout(function(){
                  window.location.href = "#gest-rfi-dashboard";
              }, notify.$options.delay);
            }
            else {
              return $user_mode;
            }
        }
     });
}

questa funzione la richiamo piu volte dalla pagina stessa in questo modo :
Codice:
  var grumode = autor("Gruppi","index");
          console.log("step2="+grumode);
          var incmode = autor("Lettere Incarico","index");
          console.log("step2="+incmode);
          var pmmode = autor("Project Manager","index");
          console.log("step2="+pmmode);

a questo punto mi aspetto che stampasse nella console questa sequenza:
step-1a=
step-1b=
step-1c=
step-2=

giusto ????

invece ho questa sequenza
step-1a=
step-2=
step-1b=
step-1c=
ma in questo modo non funziona perche al momento in cui stampa step-2 non ha ancora i dati che mi necessitano che sarebbero queli di ritorno dalla funzione.....
come posso ovviare ???? in cosa sbaglio ???
PS: i valori stampati a video delle variabili nei vari step-1 sono corretti.
 

max1974

Utente Attivo
7 Mar 2013
107
0
16
Help me PLEASE !!!... :(:(:(:(
è come se la parte di codice...
$.ajax({})
venisse sorvolato o ci mette troppo tempo a rispondere in confronto alla chiamata....e poi viene elaborato successivamente..... BHOOOOOO!!!!!!!:eek::eek::eek:
SOLUZIONI & RIMEDI ????
 
Ultima modifica:

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
Salve, il problema principale sta nella natura stessa di ajax (Asynchronous JavaScript and XML) proprio perché è un sistema asincrono. Questo significa che i dati in risposta vengono trasmessi dal server e ricevuti dal client senza interferire sul resto dello script che invece prosegue in modo parallelo per i fatti suoi. In sostanza la funzione di risposta (quella che definisci per la proprietà success) viene eseguita solo quando si ottiene la risposta dal server ma il resto dello script continua normalmente la sua esecuzione.

Soluzione:

Qualche anno fa, sebbene ajax sia asincrono per definizione, prima della versione jquery 1.8 era possibile forzare una chiamata definendo la proprietà async: false in modo che lo script si interrompesse restando in attesa della risposta. Questo metodo è attualmente deprecato.

La soluzione è usare il meccanismo delle funzioni di callback (familiare nella gestione degli eventi in javascript). Puoi quindi definire una funzione come parametro nella chiamata della funzione principale, in modo che sia lanciata non appena si riceve la risposta ajax. Dovrai quindi impostare le successive chiamate, alla funzione principale, annidandole di volta in volta nelle funzioni di callback... più facile a farsi che a dirsi.

Qui un esempio partendo dal tuo script:
Codice:
// Funzione principale con chiamata ajax
function autor(local, page, callback) {
    console.log("step-1a=" + local);
    
    $.ajax({
        url: "php/ajax_aut.php",
        method: "POST",
        data: { pages: local },
        dataType: "json",
        success: function(data) {
            /* ... */
            
            console.log("step-1b" + $char);
            
            var $user_mode = "";
            /* ... */
            
            console.log("step-1c" + $user_mode);
            
            if ($user_mode == 'no-control' && page != "index") {
            
            } else {
                callback($user_mode);
            }
        },
        /* ... meglio definire anche error */
        error: function() {
            console.log('Richiesta fallita, qualcosa è andato storto!');
        }
    });
}

// Serie di chiamate annidate con relativi callback, eseguite in sequenza relativamente alle risposte ajax ricevute
autor("Gruppi", "index", function(grumode) {
    console.log("step2=" + grumode);
    
    autor("Lettere Incarico", "index", function(incmode) {
        console.log("step2=" + incmode);
        
        autor("Project Manager", "index", function(pmmode) {
            console.log("step2=" + pmmode);
            
        });
    });
});

Vedi se riesci a combinarci qualcosa, fai sapere :)
 
Discussioni simili
Autore Titolo Forum Risposte Data
IClaude Funzione Javascript Javascript 8
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
elpirata [Javascript] Lo script alle volte funzione altre volte no Javascript 0
R [Javascript] Rendere una funzione sempre visibile Javascript 2
A [Javascript] tabella dinamica e onchange su funzione Javascript 1
P [Javascript] Inserire una nuova condizione in una funzione Javascript 3
T [Javascript] funzione per attivare analytics... dov'è l'errore? Javascript 14
L [javascript]problema funzione per webapi Javascript 4
C [Javascript] Chiamata di una funzione da *.js esterno Javascript 1
J [Javascript] una funzione ricorsiva che non capisco come lavori Javascript 6
G [Javascript] nome da dare ad una funzione Javascript 1
Laskot [Javascript] Funzione JS con parametro Javascript 4
ken_korn [Javascript] Portare variabile in una funzione esterna al suo scope Javascript 2
I Riportare dati funzione javascript in textbox Javascript 0
P [Javascript] eseguire una funzione dopo un'altra Javascript 0
Strato-Fortex [Javascript] Risoluzione funzione cifrario di Cesare Javascript 4
S [Javascript] Problema richiamo funzione Javascript 8
F [Javascript] Problema funzione jquery con elementi css esterni Javascript 1
M [Javascript] Funzione con collegamenti ipertestuali JS Javascript 4
A Funzione javascript per effettuare la slide del carosello in avanti Javascript 0
Andrea Perrone funzione javascript applicata al gioco della dama Javascript 2
S [Javascript] Codice JS inline non funzione su IE Javascript 1
ANDREA20 [Javascript] funzione menu Javascript 1
M Far partire una funzione/codice php con javascript Javascript 1
U Far partire una funzione JavaScript premendo bottone in html Javascript 13
Marco_88 Funzione mouseover Javascript jQuery 3
V Chiamata funzione php da javascript Ajax 3
M Lanciare una funzione asp.net con javascript. E' possibile? ASP.NET 0
A richiamare funzione javascript dopo login in popup. Javascript 0
B AIUTO: come passare una variabile php ad una funzione javascript Javascript 2
ivarello Attivare funzione Javascript con Jquery jQuery 0
F funzione javascript all'interno di un codice php PHP 38
A eseguire codice html da funzione javascript Javascript 2
C Un form di input e uno di output con funzione javascript Javascript 17
D Problema nella chiamata ad una funzione javascript da href Ajax 2
G funzione javascript per passaggio valori Javascript 1
A Salvataggio dati (era: funzione penso in javascript) PHP 2
I Eseguire funz. Javascript caricata tramite la funzione Ajax di JQuery in onChange Javascript 0
I Eseguire funz. Javascript caricata tramite la funzione Ajax di JQuery in onChange Javascript 0
mkrapfen aiuto! funzione javascript Javascript 0
M JavaScript: lanciare funzione ASP per salvare dati in database Javascript 0
G ajax php myqsl - problema con funzione javascript Ajax 1
I javascript non carica funzione Javascript 0
D Funzione javascript che pulisca un campo input Javascript 0
F Memorizzare valore variabile da una funzione javascript Javascript 10
M Problema funzione chiamata una volta solo in javascript Javascript 1
R passare valori da funzione javascript Javascript 1
P visulaizzare eventi con una funzione in javascript Javascript 0
G richiamare file php da funzione javascript PHP 4

Discussioni simili