Passare un argomento da una funzione all'altra con AJAX

giannidef

Nuovo Utente
17 Feb 2012
5
0
0
Salve a tutti, sto utilizzando questo codice:

Codice:
function impostaDiv(url) {

 if (window.XMLHttpRequest) { // Non-IE browsers
 req = new XMLHttpRequest();
 req.onreadystatechange = scriviDiv;
 try {
 req.open("GET", url, true);
 } catch (e) {
 alert(e);
 }
 req.send(null);
 } else if (window.ActiveXObject) { // IE
 req = new ActiveXObject("Microsoft.XMLHTTP");
 if (req) {
 req.onreadystatechange = scriviDiv;
 req.open("GET", url, true);
 req.send();       
 }
 }
}
function scriviDiv() {
 if (req.readyState == 4) { // completato
 if (req.status == 200) {
	
 document.getElementById("corpo2").innerHTML = req.responseText;
 } else {
 alert("Problem: " + req.statusText);
 }
 }
}

dove la funzione viene chiamata con un click su un link ed invia alla funzione l'URL, in questo modo:


PHP:
<a href="java-script:impostaDiv('cerca_libro.php?id={$row_data['id_biblioteca']}'"
il codice funziona perfettamente. Adesso, per non riscrivire il codice più volte, voglio inviare alla funzione due variabili (l'URL e l'ID del Div), in questo modo:


PHP:
<a href="java-script:impostaDiv('cerca_libro.php?id={$row_data['id_biblioteca']}', 'corpo2')"
modificando la funzione in questo modo:
Codice:
function impostaDiv(url, div) {

 if (window.XMLHttpRequest) { // Non-IE browsers
 req = new XMLHttpRequest();
 req.onreadystatechange = scriviDiv(div);
 try {
 req.open("GET", url, true);
 } catch (e) {
 alert(e);
 }
 req.send(null);
 } else if (window.ActiveXObject) { // IE
 req = new ActiveXObject("Microsoft.XMLHTTP");
 if (req) {
 req.onreadystatechange = scriviDiv(div);
 req.open("GET", url, true);
 req.send();       
 }
 }
}
function scriviDiv(div) {
 if (req.readyState == 4) { // completato
 if (req.status == 200) {
	
 document.getElementById(div).innerHTML = req.responseText;
 } else {
 alert("Problem: " + req.statusText);
 }
 }
}


ma il codice non funziona, anche se l'argomento div viene passato alla funzione scriviDiv, perchè se inserisco un alert


Codice:
function scriviDiv(div) {
alert(div);
 if (req.readyState == 4) { // completato
 if (req.status == 200) {
.....
..

l'alert viene eseguito correttamente. Come devo correggere il codice? Grazie!
 
Ciao
prova a mettere piu alert nella funzione

Codice:
function scriviDiv(div) {
    alert(div);
    alert(req.readyState);
    if (req.readyState == 4) { // completato
        alert(req.status);
        if (req.status == 200) {
            alert(req.responseText); // se visualizzi il response nell alert forse non trova l'elemento in cui scriverlo
            document.getElementById(div).innerHTML = req.responseText;
        } else {
            alert("Problem: " + req.statusText);
        }
    }
}

dovresti riuscire a capire dove si blocca
 
ciao criric
La variabile Div non viene passate alle condizioni, ho provato in questo modo:
Codice:
function scriviDiv(div) {
	alert(div);
	 alert(req.readyState);
 if (req.readyState == 4) { // completato
  alert(req.status);
 if (req.status == 200) {
alert(div);
 //a.innerHTML = req.responseText;
 document.getElementById(div).innerHTML = req.responseText;
 } else {
 alert("Problem: " + req.statusText);
 }
 }
 alert(div);
}
ma vengono eseguiti solo il primo, il secondo e l'ultimo (fuori dalle condizioni). Credo che le condizioni vengano proprio saltate infatti, se scrivo:
Codice:
document.getElementById("corpo2").innerHTML = req.responseText;
il div non viene generato.
 
Ciao prova cosi:

Codice:
function impostaDiv(url, div) {

    if (window.XMLHttpRequest) { // Non-IE browsers
        req = new XMLHttpRequest();
        req.onreadystatechange = function() {           
            
            if (req.readyState == 4) { // completato
                
                if (req.status == 200) {
                    
                    document.getElementById(div).innerHTML = req.responseText;
                } else {
                    alert("Problem: " + req.statusText);
                }
            }
           
        }    

        try {
            req.open("GET", url, true);
        } catch (e) {
            alert(e);
        }
        req.send(null);
    } else if (window.ActiveXObject) { // IE
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = scriviDiv(div);
            req.open("GET", url, true);
            req.send();       
        }
    }
}

ho evitato di richiamare la seconda funzione e l'ho inglobata nella prima
dovrebbe funzionare

non sono esperto ne di js ne di ajax quindi non saprei spiegarti il motivo

confido in qualche esperto

PS: se ti funziona devi modificare anche dopo l'else if
 
Ultima modifica:
se tu non sei un esperto, Cicciolina è vergine, il codice funziona perfettamente. Grazie mille
poi cercherò di capire perchè non funziona con due funzioni (potrebbe, comunque, tornare utile) Ancora grazie.
 
se la cosa può interessarti, mi è stato consigliato anche di fare in questo modo
Codice:
req.onreadystatechange = function(){scriviDiv(div)};
al posto di:
Codice:
req.onreadystatechange = scriviDiv;
e funziona perfettamente. Grazie per il tuo suggerimento.
 
Si mi interessa

fa la stessa cosa ma è più elegante di come te l'ho postata io

Non smetterò mai di voler apprendere in questo campo
 

Discussioni simili