Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Da php a JS potendo usare solo .js

    Salve a tutti, ho la necessità di richiamare codice php all'interno di un file .js escludendo così la possibilità di un'interazione diretta tra i due.

    Sto dunque utilizzando il metodo con XMLHttpRequest(), onreadystatechange e responseText.

    Se faccio un alert all'interno della mia funzione di importazione mediante responseText con la variabile che ho preso dal file php non ho alcun problema. Devo però esportare tale variabile in modo da poterla utilizzare al di fuori della funzione.

    codice:
    	oReq = new XMLHttpRequest();
    	oReq.onreadystatechange = reportStatus;
    	oReq.open("GET", "http://localhost/mappa/func.php", true);
    	oReq.send(null);
    codice:
    function reportStatus()
    	{	
       		if (oReq.readyState == 4)
    		{
    		response = oReq.responseText;
    		alert(response);
    		}
    		else
    		{
    		//loading
    		}
    	}
    La mia domanda è dunque come utilizzare quella variabile response che funziona solo all'interno di quella funzione.
    http://embracesblog.mine.nu
    http://wiki.ubuntu-it.org/AndreaOlivato

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    prova con

    window.response = oReq.responseText;

    oppure predisponi una variabile globale che ricava il valore

    codice:
    var response;
    function .....
    		...
    		response = oReq.responseText;
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Innanzitutto grazie per la risposta, purtroppo però continua a non restituirmi il valore.

    Nel caso della variabile globale, sembra che non sia interessata da ciò che accade nella funzione dato che mi restituisce 'undefined' dopo che la funzione ha girato almeno una volta (alert sempre visualizzato correttamente)

    codice:
    var response;
    function .....
    		...
    		response = oReq.responseText;
    Nel caso invece di utilizzare (ho supposto di doverlo porre dopo aver richiamato la funzione con oReq.onreadystatechange = reportStatus window.response = oReq.responseText; ottengo un valore nullo (non scrive proprio niente)
    http://embracesblog.mine.nu
    http://wiki.ubuntu-it.org/AndreaOlivato

  4. #4
    Ho provato anche ad inserire il mio
    codice:
    window.response = oReq.responseText;
    nel ciclo if
    codice:
    function reportStatus()
    	{	
       		if (oReq.readyState == 4)
    		{
    		response = oReq.responseText;
    		window.response = oReq.responseText;
    		alert(response);
    		//return response;
    		}
    		else
    		{
    		//loading
    		}
    	}
    Ma il risultato peggiora, non restituendo più nulla
    http://embracesblog.mine.nu
    http://wiki.ubuntu-it.org/AndreaOlivato

  5. #5
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Tu hai postato una porzione degli script che hai e non si evince l'ambito di valididita' delle variabili e delle funzioni... inoltre hai mantenuto anche la riga

    response = oReq.responseText;

    che andava ovviamente eliminata.

    Posta l'intero script o un link alla pagina.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  6. #6
    codice:
    var messages = new Array();
    var response;
    function reportStatus()
    	{	
       		if (oReq.readyState == 4)
    		{	
    		response = oReq.responseText;
    		//window.response = oReq.responseText;
    		alert(response);
    		//return response;
    		}
    		else
    		{
    		//loading
    		}
    	}
    
    for (i=0; i<document.links.length; i++) 
    {
    	oReq = new XMLHttpRequest();
    	oReq.onreadystatechange = reportStatus;
    	oReq.open("GET", "http://localhost/mappa/func.php", true);
    	oReq.send(null);
    	messages[i] = new Array('red_balloon.gif','Ci sono stati '+i+' clicks.',"#FFFFFF");
    	document.links[i].setAttribute('onmouseover', 'doTooltip(event,'+i+')');
    	document.links[i].setAttribute('onmouseout', 'hideTip()');
    	document.links[i].setAttribute('id', 'id_'+i+'');
    	document.links[i].innerHTML=document.links[i].innerHTML+'</a><font size="1" style=""> '+i+'clicks</font>';
    	
    }
    codice:
    var messages = new Array();
    //var response;
    function reportStatus()
    	{	
       		if (oReq.readyState == 4)
    		{	
    		//response = oReq.responseText;
    		window.response = oReq.responseText;
    		alert(response);
    		//return response;
    		}
    		else
    		{
    		//loading
    		}
    	}
    
    for (i=0; i<document.links.length; i++) 
    {
    	oReq = new XMLHttpRequest();
    	oReq.onreadystatechange = reportStatus;
    	oReq.open("GET", "http://localhost/mappa/func.php", true);
    	oReq.send(null);
    	messages[i] = new Array('red_balloon.gif','Ci sono stati '+response+' clicks.',"#FFFFFF");
    	document.links[i].setAttribute('onmouseover', 'doTooltip(event,'+i+')');
    	document.links[i].setAttribute('onmouseout', 'hideTip()');
    	document.links[i].setAttribute('id', 'id_'+i+'');
    	document.links[i].innerHTML=document.links[i].innerHTML+'</a><font size="1" style=""> '+i+'clicks</font>';
    	
    }
    Il codice completo è molto più lungo e complesso ma sia la funzione che il ciclo sono fuori da altre funzioni. Mi basta che anche la variabile response sia disponibile all'esterno della funzione, dato che vorrei scriverla all'interno del ciclo così
    http://embracesblog.mine.nu
    http://wiki.ubuntu-it.org/AndreaOlivato

  7. #7

    Re: Da php a JS potendo usare solo .js

    Originariamente inviato da Crypt
    la variabile response che funziona solo all'interno di quella funzione.
    errato, se ometti var qualunque variabile diventa globale e nel tuo caso, essendo sul browser, scrivere
    codice:
    response = "pippo";
    oppure
    codice:
    window.response = "pippo";
    è esattamente la stessa cosa, ergo senza var response sarà globale.

    Il tuo problema è un altro, non hai ben chiaro il significato di asincrono (e non conosci le best practices Ajax, dato che fai N chiamate in un ciclo for ...) e ti aspetti che il return di onreadystatechange venga assegnato/eseguito come qualunque funzione.

    Consiglio una lettura di un qualunque articolo/guida su Ajax, prima di proseguire
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.