Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    32

    Chiamata AJAX "di libreria"

    Buongiorno,
    mi scuso ma non trovavo delle parole adatte per descrivere il problema nel titolo meglio di cosi.

    io ho questa funzione, nello script ajax.js
    codice:
    function chiamata_ajax(dati, metodo, pagina, funzione) {	var req;
    	dati = dati || "";
    	try { xmlHttp=new XMLHttpRequest(); }
    	catch (e)
    		{ try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
    	catch (e)
    		{ try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
    	catch (e)
    		{ window.alert("Il tuo browser non supporta AJAX");
    	return;
    	}
    	}
    	}
    	req.onreadystatechange = funzione(req);
    	req.open(metodo, pagina+"?q="+dati, true);
    	req.send();
    }
    in pratica la funzione fa una chiamata ajax sulla base dei parametri che le vengono passati:
    dati: eventuali dati che vanno inviati al server
    metodo: GET o POST
    pagina: pagina php da eseguire
    funzione: la funzione che viene eseguita al cambio di stato.

    il problema è che la funzione passata come parametro è scritta in un altro file(script.js) quindi avrei bisogno di passare l'oggetto richiesta ajax(req) a questa funzione in modo da poter leggere il "ReadyState" e lo "Status".

    la funzione in script.js è qualcosa di simile
    codice:
    function handeresponse(richiesta) {	if(richiesta.readyState == 4) {
    		if(richiesta.status == 200) {
                         //Faccio quello che devo fare con i dati ricevuti (richiesta.responsetext)
    		}
    		else
    			//non faccio niente
    	}
    }
    in sostanza non riesco a capire come chiamare la funzione che fa la chiamata AJAX perche facendo qualcosa di questo tipo:
    codice:
    chiamata_ajax("", "GET", "pagina.php", handleresponse())
    non funziona.

    grazie

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Leggi qui non proprio recentissima (in rete forse trovi anche qualcosa di più attuale) ma i concetti non sono cambiati nel frattempo.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Prima chiami la variabile xmlHttp e poi req
    No

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    32
    Quote Originariamente inviata da tampertools Visualizza il messaggio
    Prima chiami la variabile xmlHttp e poi req
    si quello l'ho notato poco dopo aver postato il codice ma non sono risucito a correggerlo.
    Il problema in ogni caso è chiamare la funzione passandogli come parametro l'oggetto req

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Quote Originariamente inviata da lomba91 Visualizza il messaggio
    si quello l'ho notato poco dopo aver postato il codice ma non sono risucito a correggerlo.
    Il problema in ogni caso è chiamare la funzione passandogli come parametro l'oggetto req
    Non ti va di leggere la guida credo non sia la scelta giusta, che comunque non va passato "oggetto" basta rendere la variabile globale ma è non l'unico problema in quel codice
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    32
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    Non ti va di leggere la guida credo non sia la scelta giusta, che comunque non va passato "oggetto" basta rendere la variabile globale ma è non l'unico problema in quel codice
    certo, sto leggendo la guida, ho risposto solo per far presente che il problema non è dovuto a quello nel caso qualcun altro con il solito problema legga il post. Inoltre ti ringrazio perche quella guida è quello che cercavo dato che in rete non si trovano molte cose utilizzando il metodo POST.

    Per quanto riguarda la variabile globale non è una soluzione poichè se si fanno 2 chiamate nella solita pagina sorgono dei problemi.

  7. #7
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Quote Originariamente inviata da lomba91 Visualizza il messaggio
    Per quanto riguarda la variabile globale non è una soluzione poichè se si fanno 2 chiamate nella solita pagina sorgono dei problemi.
    Non credo sia come dici ma non sviluppo più in Ajax puro (uso jquery) da tre anni e potrei sbagliare, ma visto che leggi la guida quasi sicuramente risolvi
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    32
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    Non credo sia come dici ma non sviluppo più in Ajax puro (uso jquery) da tre anni e potrei sbagliare, ma visto che leggi la guida quasi sicuramente risolvi
    ho finito di leggere la guida e tratta di parecchie cose utili. Il problema è che non tratta la cosa che mi interessava.
    Fondamentalmente il problema è questo:

    le funzione che crea l'oggetto della chiamata (req) è su un file, chiamato ajax.js e in un altro file, chiamato script.js viene chiamata la suddetta funzione.
    Nel file script.js viene anche definita una funzione da eseguire ogniqualvolta cambi lo stato della chiamata ajax e, nel caso in cui vengano fatte 2 chiamate ajax, saranno definite due diverse funzioni chiamate al "onreadystatechnge" dell'oggetto.

    Il problema a questo punto è che le funzioni chiamate al "onreadystatechnge" non hanno accesso all'oggetto ajax poiche viene creato all'interno della funzione definita nel file ajax.js.
    Mettendo come globale l'oggetto ajax, quando vengono fatte 2 chiamate in contemporane succede che vengono entrambe eseguite correttamente ma solo una delle due funzioni al "onreadystatechnge" esegue correttamente.

  9. #9
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    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.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    32
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    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

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