Visualizzazione risultati 1 fino 9 di 9

Discussione: JS chiama PHP ma non aspetta!

  1. #1
    Guest

    Question JS chiama PHP ma non aspetta!

    Vorrei fare uno script JS che intercetti i click nei link della pagina e avvii uno script PHP per il log.

    Al momento ho fatto così:

    Codice HTML:
    ...pagina...
    <script language="javascript">
       var handler = function() {
       //alert( this.href );
       var fake = new Image;
       fake.src = "test.php?url="+escape(this.href);
    }
    
    // Qui associo ad ogni link della pagina la funzione 'handler'
    for (var ls = document.links, numLinks = ls.length, i=0; i<numLinks; i++)
       { ls[i].onclick = handler; }
    </script>
    </body>
    Se attivo l'alert() nella handler() è tutto ok... viene chiamato lo script PHP. Altrimenti no... e il mio ragioanmento è stato questo: il browser va subito alla pagina clickata e non dà il tempo allo script di completare la chiama al PHP.
    Sbaglio?
    Suggerimenti?
    Grazie.

  2. #2
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    prova a cambiare la funzione di invio del file con questa tipo:

    Codice HTML:
    <script language="javascript">
    var handler = function() {
    
    var jsel = document.createElement('SCRIPT');
    
    jsel.type = 'text/javascript';
    
    jsel.src = "test.php?url="+escape(this.href);
    
    //Appende l'elemento JS e quindi esegue la 'chiamata AJAX'
    document.body.appendChild (jsel);
       
    }
    
    </script>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  3. #3
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Non cambia nulla, se la funzione viene eseguita poco prima di cambiare pagina è difficile che la richiesta venga portata a termine.

  4. #4
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    ho provato entrambi le funzioni di invio e a me funzionano....

    per verificarlo semplicemente ho inserito window.open():
    Codice HTML:
    <script language="javascript">
       var handler = function() {
       //alert( this.href );
       var fake = new Image;
       fake.src = "test.php?url="+escape(this.href);
    
    //ho inserito window.open:
    window.open(fake.src);
    
    }
    
    // Qui associo ad ogni link della pagina la funzione 'handler'
    for (var ls = document.links, numLinks = ls.length, i=0; i<numLinks; i++)
       { ls[i].onclick = handler; }
    </script>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  5. #5
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Se apri la pagina con il metodo open è ovvio che la richiesta verrà completata, ma non credo si possa definire una richiesta nascosta.

  6. #6
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    non dipende da quello, window.open() lo uso solo come test per vedere se la funzione hadler viene eseguita......

    dipende che bisogna suddividere il js in due parti, la parte della funzione hadler tra <head> e </head>

    e la parte di lettura dei clicks che richiamano la funzione subito prima del </body>, in pratica alla fine della pagina o del template in uso....
    questo permette a document.links di rilevare tutti i links della pagina....

    lo provato e testato su di una mia pagina e funziona.....!
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  7. #7
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Io ho scritto che la richiesta HTTP non verrà eseguita in queste condizioni, la funzione viene eseguita correttamente stando a quanto ha scritto Robertobizzarri nel primo messaggio.

  8. #8
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    allora, ho risolto in questo modo:

    Codice HTML:
    <head>
    <script language="javascript">
       var handler = function() {
       //alert( this.href );
       //var fake = new Image;
       //fake.src = "../drupal/statistiche.php?url="+escape(this.href);
    	 
    	 var	memocode = '<iframe name="memo_frame" src="../drupal/statistiche.php?url='+escape(this.href)+'" width="1" height="1" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" framespacing="0">Your browser does not support inline frames or is currently configured not to display inline frames.</iframe>';
    	 document.getElementById("memo_space").innerHTML = memocode;
    	
    	 
    	 //window.open(fake.src);
    }
    </script>
    </head>
    <body
    
    
    
    <script language="javascript">
    // Qui associo ad ogni link della pagina la funzione 'handler'
    var ls = document.links;
    var numLinks = ls.length;
    
    //document.write(numLinks);
    
    for (i=0; i<numLinks; i++) { ls[i].onclick = handler; }
    </script>
    <div id="memo_space"></div>
    </body>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  9. #9
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    tornando al codice di Robertobizzarri , e tornando a quello che ha detto karl94, sono tornato a fare alcuni test ....

    e quindi ho inserito un ciclo di pausa o di ritardo nel JS in questo modo ( tanto per verificare che effettivamente la richiesta http non venisse eseguita):

    Codice HTML:
    <script language="javascript">
       var framestat = function() {
       //alert( this.href );
    	 var fake = new Image;
       fake.src = "../drupal/statistiche.php?url="+escape(this.href);
    
    //ciclo di pausa, impostare es milliseconds=1000 => 1 sec
    var milliseconds = '1';
    var start = new Date().getTime(); 
      for (var i = 0; i < 1e7; i++) { 
        if ((new Date().getTime() - start) > milliseconds){ 
          break; 
        } 
      } 
    
    	
    }
    </script>
    impostando a 1 millisecondo la richiesta viene sempre eseguita....quello che dicevo nelle precedenti discussioni.

    in quanto nel file statistiche.php la variabile url deve essere memorizzata per esempio come sessione e quindi può essere utilizzata:

    Codice PHP:
    <?

    session_start
    ();
    $url=null;

    if (isset(
    $_GET["url"]) AND !empty($_GET["url"])) {
    $url = $_GET["url"];
    $_SESSION["url"] = $url;
    }

    echo
    "<p>URL = ".$url;
    echo
    "<p>URL SESSIONE = ".$_SESSION["url"];


    ?>
    per chi fosse interessato, ho eseguito una ulteriore verifica....

    capita che su diversi links, la richiesta http non venga eseguita con un ciclo di pausa impostato a 1 millisecondo....

    invece impostandolo almeno a 100 millisecondi, anche questi links vengono inviati
    Ultima modifica di EuroSalute : 25-09-2011 alle ore 18.34.08 Motivo: più info...
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •