
Originariamente inviata da
cavicchiandrea
Non c'ho capito molto e non capisco la scelta di creare due pagine.js, se stai cercando di modificare uno script sviluppato da altri ricordati che ti occorre una ottima conoscenza sia di js che di ajax (che una guida non può bastare e il forum non può sopperire alle tue "mancanze").
Se invece stai cercando di realizzare qualcosa senza conoscenze (con un abuso indiscriminato del copia/incolla) prova a spiegare cosa devi fare forse si trova un'alternativa più semplice e/o funzionale.
Chiaramente tutto quello fin quei detto senza voler offendere nessuno.

sono uno studente di ingegneria informatica e tutto quello che sto postando è realizzato interamente da me, non c'è nessun copia/incolla. Devo realizzare un'applicazione web come consegna del corso universitario e, poichè ci è stato detto di cercare informazioni in rete prima di rivolgerci al docente ho scritto sul forum.
La scelta di dividere il codice su piu pagine è per evitare ridondanze nel codice, aspetto che ci viene valutato parecchio. Di conseguenza avendo da fare molte chiamate ajax ho la necessità di creare una funzione "di libreria" da chiamare ogni volta che devo eseguire una chiamata, ovvero questa, alla quale ho fatto un po di modifiche e correzioni:
codice:
function chiamata_ajax(dati, metodo, pagina, funzione) {
var req;
dati = dati || "";
try { req = new XMLHttpRequest(); }
catch (e) {
try { req = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) {
try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) {
window.alert("Il tuo browser non supporta AJAX");
return;
}
}
}
if(metodo == "GET")
pagina = pagina+"?q="+dati
req.open(metodo, pagina, true);
req.onreadystatechange = funzione;
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
if(metodo == "POST")
req.send(dati);
else
req.send();
}
detto questo, cerco di spiegare nuovamente il problema anche se non è molto semplice.
La funzione scritta sopra viene chiamata ogni volta che devo fare una chiamata ajax, il vantaggio è che in ogni pagina html che realizzo mi è sufficiente includere il file contetente quella funzione senza doverla incollare negli script unici della pagina html (che chiamerò prova.html per praticita).
Nella pagina prova.html includerò un altro script, contenente le funzioni sviluppate ESCLUSIVAMENTE per quella pagina, script che chiamerò script.js.
in script.js, per effettuare una chiamata ajax sarà sufficiente scrivere:
codice:
chiamata_ajax("dati da dare al server", "get/post", "pagina.php", funzione_onreadystatechange);
l'argomento "funzione_onreadystatechange" conterrà il nome della funzione da chiamara ogni volta che lo stato della chiamata cambia e sarà definita sempre in script.js.
il problema sorge perche questa funzione è definita in questo modo:
codice:
function funzione_onreadystatechange() {
if(OGGETTOXMLHTTP.readyState == 4) {
if(OGGETTOXMLHTTP.status == 200)
//Faccio qualcosa
else
alert("Errore, AJAX non funziona: " + richiesta_login.status);
}
}
L'accesso a "OGGETTOXMLHTTP", che nella funzione chiamata_ajax() si chiama req, non è consentito, poiche creato all'interno della funzione.
come detto prima, dichiarando req all'esterno della funzione chiamata_ajax() non risolvo il problema poiche tale oggetto, se utilizzato da piu di una funzione_onreadystatechange() causerebbe conflitti.
La mia domanda è quindi:
come fare per far si che ogni chiamata della funzione chiamata_ajax() sia a se stante e che l'oggetto creato sia accessibile soltanto dalla funzione funzione_onreadystatechange() che viene passata come argomento quando si effettua la chiamata?
Mi scuso ma meglio di cosi non riesco a spiegarmi.
Grazie dell'aiuto