Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327

    problema con l'esecuzione di uno script ajax

    salve a tutti,

    ho questo codice



    function avvia_operazione(pagina_salvataggio) {

    var risultato_finale;

    var xhri = xhrRequest('html');


    xhr[xhri].open("GET", pagina_salvataggio);

    xhr[xhri].setRequestHeader("connection", "close");

    xhr[xhri].onreadystatechange = function() {

    if (xhr[xhri].readyState === 4) {

    if (xhr[xhri].status == 200){


    risultato_finale = "processo eseguito correttamente";

    }

    xi[xhri] = 1;
    xhr[xhri] = null;

    }else{

    risultato_finale = "Errore.
    Il problema potrebbe dipendere dal ritorno dati da parte del server. Contattare l\'amministratore.";

    }


    }

    alert(risultato_finale);


    xhr[xhri].send(null);



    }


    vorrei capire per quale motivo la variabile risultato_finale arriva undefined alla fine della funzione... sto diventando matto..

    qualsiasi risultato viene attribuito alla variabile, dovrebbe cmq essere disponibile in un eventuale return finale della funzione ma come potete vedere, l'alert stampa solo un bel undefined.... se invece l'alert lo metto dentro if (xhr[xhri].status == 200){ e alla fine, il risultato me lo da....

    vi prego aiutatemi perchè sto impazzendo...

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,132
    Non si capisce se lo script è tutto li o mancano dei pezzi, comunque qui trovi tutto quello che c'è da sapere su ajax sapientemente spiegato, ciao.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    grazie mille per la risposta, cmq hai ragione lo script è più lungo di cosi

    Le prime funzioni gestiscono le richieste asincrone

    // JavaScript Document
    var myRequest = null;
    // Codici di ritorno http
    var statusText = new Array();
    statusText[100] = "Continue";
    statusText[101] = "Switching Protocols";
    statusText[200] = "OK";
    statusText[201] = "Created";
    statusText[202] = "Accepted";
    statusText[203] = "Non-Authoritative Information";
    statusText[204] = "No Content";
    statusText[205] = "Reset Content";
    statusText[206] = "Partial Content";
    statusText[300] = "Multiple Choices";
    statusText[301] = "Moved Permanently";
    statusText[302] = "Found";
    statusText[303] = "See Other";
    statusText[304] = "Not Modified";
    statusText[305] = "Use Proxy";
    statusText[306] = "(unused, but reserved)";
    statusText[307] = "Temporary Redirect";
    statusText[400] = "Bad Request";
    statusText[401] = "Unauthorized";
    statusText[402] = "Payment Required";
    statusText[403] = "Forbidden";
    statusText[404] = "Not Found";
    statusText[405] = "Method Not Allowed";
    statusText[406] = "Not Acceptable";
    statusText[407] = "Proxy Authentication Required";
    statusText[408] = "Request Timeout";
    statusText[409] = "Conflict";
    statusText[410] = "Gone";
    statusText[411] = "Length Required";
    statusText[412] = "Precondition Failed";
    statusText[413] = "Request Entity Too Large";
    statusText[414] = "Request-URI Too Long";
    statusText[415] = "Unsupported Media Type";
    statusText[416] = "Requested Range Not Satisfiable";
    statusText[417] = "Expectation Failed";
    statusText[500] = "Internal Server Error";
    statusText[501] = "Not Implemented";
    statusText[502] = "Bad Gateway";
    statusText[503] = "Service Unavailable";
    statusText[504] = "Gateway Timeout";
    statusText[505] = "HTTP Version Not Supported";
    statusText[509] = "Bandwidth Limit Exceeded";

    var xhr = new Array();
    var xi = new Array(0);
    xi[0] = 1;


    function xhrRequest(type) {
    if (!type) {

    type = 'html';

    }



    var xhrsend = xi.length;


    for (var i=0; i<xi.length; i++) {

    if (xi[i] == 1) {
    xi[i] = 0;
    xhrsend = i;
    break;
    }

    }


    // SET TO 0 SINCE IT'S NOW ALLOCATED FOR USE
    xi[xhrsend] = 0;


    // SET UP THE REQUEST
    if (window.ActiveXObject) {

    try {

    xhr[xhrsend] = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e) {
    try {

    xhr[xhrsend] = new ActiveXObject("Microsoft.XMLHTTP");

    } catch (e) {}
    }
    } else if (window.XMLHttpRequest) {

    xhr[xhrsend] = new XMLHttpRequest();

    if (xhr[xhrsend].overrideMimeType) {

    xhr[xhrsend].overrideMimeType('text/' + type);

    }

    }

    return (xhrsend);

    }


    function avvia_operazione(pagina_salvataggio) {

    var maxSecondsWait = 10;
    var timeOutCheckWait = 500;

    var dataChiamata = new Date();
    var inizioChiamata = dataChiamata.getTime();
    var verificaTempoTrascorso;
    var checkWaitInitialized = false;
    var maxWait;
    var risultato_finale;

    var xhri = xhrRequest('html');


    xhr[xhri].open("GET", pagina_salvataggio);

    xhr[xhri].setRequestHeader("connection", "close");

    xhr[xhri].onreadystatechange = function() {

    if (xhr[xhri].readyState === 4) {

    verificaTempoTrascorso = function(){};

    if (xhr[xhri].status == 200){

    var risultato_generale = xhr[xhri].responseText.split('@@@@@');

    if (risultato_generale[0] != 'ERROR' && risultato_generale[0] != 'SUCCESS'){

    risultato_finale = "0@@@@@@Errore.
    Il problema potrebbe dipendere dal ritorno dati da parte del server. Contattare l\'amministratore.";

    }

    if (risultato_generale[0] == "SUCCESS"){

    risultato_finale = "1@@@@@@"+risultato_generale[1];
    alert(risultato_finale);
    }

    if (risultato_generale[0] == "ERROR"){

    risultato_finale = "0@@@@@@Errore.
    Il problema potrebbe dipendere dal ritorno dati da parte del server. Contattare l\'amministratore.";

    }

    xi[xhri] = 1;
    xhr[xhri] = null;

    }else{

    risultato_finale = "0@@@@@@Richiesta non andata a buon fine
    Esito: " + xhr[xhri].status + " " + statusText[xhr[xhri].status] + ". Segnalare il problema all'assistenza";

    }

    }else if (! checkWaitInitialized) {

    maxWait = maxSecondsWait * 1000;
    verificaTempoTrascorso = function() {
    dataChiamata = new Date();

    if((dataChiamata.getTime() - inizioChiamata) > maxWait) {
    //tempo scaduto!!

    xhr[xhri].onreadystatechange = function(){return;};
    xhr[xhri].abort();

    risultato_finale = "0@@@@@@Il server tarda a rispondere!
    Ritentare fra qualche secondo o segnalare il problema all'assistenza";

    } else
    setTimeout(verificaTempoTrascorso, timeOutCheckWait);
    };
    verificaTempoTrascorso();
    checkWaitInitialized = true;
    };

    };

    xhr[xhri].send(null);

    }




    Quest'altra, invece, è la funzione che richiede le informazioni alla pagina php attraverso la funzione "avvia_operazione" che dovrebbe restituire il risultato con il return..


    function conf_global(){


    form = document.getElementById("form_1");

    var stringa = "read_settings.php";

    var prova = avvia_operazione(stringa);

    document.getElementById('operazione_in_corso').inn erHTML = prova;

    return false;

    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    se metto un alert dopo aver chiuso if (xhr[xhri].readyState === 4) {, cosi

    if (xhr[xhri].readyState === 4) {
    ...
    }else if (! checkWaitInitialized) {
    ...
    };

    alert(risultato_finale);


    il return me lo da... ma come mai??

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