Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    ancora noie con promise e xmlhttrquest

    Ciao a tutti, non riesco a ficcarmi in testa questo oggetto promise.
    Tramite 2 funzioni infio una richiesta xmlhttprequest inglobato in promise ecco il codice:

    codice:
    var xhr = (url, data, pgr) => {
        return new Promise(function(resolve, reject) {
            let xhttp = new XMLHttpRequest;
            xhttp.open("POST", url, true);
            xhttp.onreadystatechange = function() {
                if (xhttp.readyState === 4 && xhttp.status === 200) {
                    resolve(xhttp.responseText);
                } else {
                    alert(xhttp.onerror);
                    reject(xhttp.onerror);
                }
            }
            xhttp.send(data);
    
    
            if (pgr === 1) {
               .........
            }
        });
    }
    
    function prova(){
            const bt = document.querySelector("#btSend");
            btSend(0, bt, bt.innerText);
    
    
            formdata = new FormData();
            formdata.append("username", username.value);
            formdata.append("password", password.value);
            xhttp = xhr("/scr/lgn.php", formdata, 0)
                .then(function(response) {
                    alert(response);
                    if (response !== "") {
                        document.getElementById("resFrmLgn").innerText = response;
                    }
                    btSend(1, bt, "");
                }).catch(function(error) {
                    console.log(error);
                    btSend(1, bt, "");
                });
    }
    il problema che resolve() mi da sempre null;
    mentre se faccio alert(xhttp.responseText) il risultato ce

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,950
    codice:
    let xhttp = new XMLHttpRequest;
    C'è un errore nella riga sopra, dove mancano delle parentesi dopo la chiamata alla funzione costruttore; inoltre, è omessa buona parte del restante codice presente nella funzione denominata "xhr" che potrebbe essere tranquillamente parte in causa del problema.

    Carica un prototipo che riproduca il problema su un sito pubblico, tipo CodePen, in modo che si possa esaminare il caso di studio ed eseguire il codice di esempio.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Quote Originariamente inviata da alka Visualizza il messaggio
    codice:
    let xhttp = new XMLHttpRequest;
    C'è un errore nella riga sopra, dove mancano delle parentesi dopo la chiamata alla funzione costruttore; inoltre, è omessa buona parte del restante codice presente nella funzione denominata "xhr" che potrebbe essere tranquillamente parte in causa del problema.

    Carica un prototipo che riproduca il problema su un sito pubblico, tipo CodePen, in modo che si possa esaminare il caso di studio ed eseguire il codice di esempio.
    Ma scusa dove mancano le parentesi?
    Cosa poi manca nella funzione xhr?
    In responseText se ci metto un alert ho il risultato e in then(function(response) se metto un alert in response mi da null

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,950
    Quote Originariamente inviata da techno Visualizza il messaggio
    Ma scusa dove mancano le parentesi?
    Dopo XMLHttpRequest:
    let xhttp = new XMLHttpRequest();

    Quote Originariamente inviata da techno Visualizza il messaggio
    Cosa poi manca nella funzione xhr?
    Ci sono dei puntini di sospensione nel tuo codice... qualcosa manca senz'altro.
    Cosa sia però, non posso immaginarlo.

    Quote Originariamente inviata da techno Visualizza il messaggio
    In responseText se ci metto un alert ho il risultato e in then(function(response) se metto un alert in response mi da null
    Significa che tra una fase e l'altra succede qualcosa che annulla il risultato, o qualcosa del genere, ma ripeto: è difficile testare il codice guardandolo, così come è arduo ricopiare il caso per riprodurlo, quindi dovresti rivedere l'architettura magari partendo dalle basi (ossia aggiungendo codice poco alla volta) e testarlo online su qualche sito... non appena il problema si presenta, si analizza la questione.

    Se si trattasse di qualsiasi altro linguaggio, tipo C# o Delphi, non ci sarebbe questo tipo di problema, ma JavaScript è troppo suscettibile al minimo "inghippo" che - senza segnalare alcun errore - fa fallire una chiamata o una implementazione di codice, soprattutto se non scritta in modo rigorosissimo e ordinato.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    782
    Non so se ho capito bene, comunque resolve() ti restituisce una Promise non un valore.
    La Promise ti restituisce un valore dentro alla funzione then(), li dovresti poter accedere correttamente ai tuoi dati.

    Io le Promise le odio, quando posso uso sempre async await

  6. #6
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    Non so se ho capito bene, comunque resolve() ti restituisce una Promise non un valore.
    La Promise ti restituisce un valore dentro alla funzione then(), li dovresti poter accedere correttamente ai tuoi dati.

    Io le Promise le odio, quando posso uso sempre async await
    Mentre la chiamata xmlhttprequest mi restituisce il risultato cercato la promise mi restituisce null

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,950
    Quote Originariamente inviata da techno Visualizza il messaggio
    Mentre la chiamata xmlhttprequest mi restituisce il risultato cercato la promise mi restituisce null
    Direi che questo è chiaro: continuare a ribadirlo senza aggiungere altri dettagli (es. codice mancante) o senza "isolare" il problema rendendolo indagabile, non aggiunge nulla di nuovo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    782
    Quote Originariamente inviata da techno Visualizza il messaggio
    Mentre la chiamata xmlhttprequest mi restituisce il risultato cercato la promise mi restituisce null
    Non ci dici come e dove ricavi questi valori (farlo nel primo o nel secondo blocco cambia molto), quindi è difficile capire cosa non ti funziona come vorresti. In ogni caso a me sembra che non ci siano grossi problemi, una Promise non ti restituisce un valore se non dopo averla risolta e aver preso il risultato dentro la funzione then(). Quindi è normale che tu non riceva nessun valore da resolve() mentre lo ricevi se fai un alert(). Le promise funzionano così.

    Se dentro la then() la variabile response ha il valore corretto vuol dire che funziona.

  9. #9
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    Non so se ho capito bene, comunque resolve() ti restituisce una Promise non un valore.
    La Promise ti restituisce un valore dentro alla funzione then(), li dovresti poter accedere correttamente ai tuoi dati.

    Io le Promise le odio, quando posso uso sempre async await
    Ho usato anche io async / await e ora funziona tutto bene

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    782
    Hai fatto bene, async await è molto più intuitivo, e semplifica anche il codice.
    Comunque secondo me il codice precedente era corretto, solo non avevi capito bene come e quando si valorizza la Promise.

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 © 2021 vBulletin Solutions, Inc. All rights reserved.