Newsgroup: it.comp.lang.javascript
Titolo: Php, Ajax

Ciao a tutti. Ho fatto il codice che segue, ma ho un comportamento
imprevisto. Non so se si tratti di php o javascript, per cui lo posto
qui per ora o nel caso si trattasse di php lo posterò nel NG
corretto.
In pratica, ho creato una funzione che richiama del codice javascript
dinamicamente in base a 3 parametri:
$nomediv, che contiene il nome del div da modificare,
$microtime, che indica il numero di millisecondi per il refresh della
pagina richiamata
$pageToRefresh, contiene il path relativo della pagina richiamata.
In pratica se richiamo la funzione con:
<?php $updateOnline=aggiornaPagina("online",10000,"admin/
online.php");?
nell'head della pagina chiamante, funziona regolarmente tutto.
Se aggiungo un'altra istanza alla stessa funzione:
<?php $updateCorpo=aggiornaPagina("corpo",5000,"admin/
stampa_parametri.php");?>
sempre nell'head della pagina chiamante, alla riga successiva, mi
esegue solo la seconda funzione e non la prima.
Spero di essermi spiegato nel modo corretto.
Grazie a tutti!!
function aggiornaPagina($nomeDiv,$microtime,$pageToRefresh){
# Questa funione apre il risultato GET di una pagina in un div
# ($nomeDiv) presente nella pagina chiamante.
/****************************************************************
ESEMPIO:
----------------------
PAGINA (chiamante) mail.php:
<html>
        <head>
                <!-- qui va messo il richiamo della funzione
aggiornaPagina() -->
        </head>
        <body>
                <div id="$nomeDiv">Aggiornamento in corso...</div> //
sosituisci
$nomeDiv col nome del div
        </body>
</html>
-----------------------
PAGINA (richiamata) controllaMail.php:
<?php
 $sql="select * from mail...";
 $q=mysql_query;
 $result= mysql_fetrch_array($q);
 print $result[nick];
?>
------------------------
Posto che abbiamo assegnato a $pageToRefresh il valore di
"controllaMail.php",
in $nomeDiv verrà stampato ogni $microtime secondi, $result[Nick],
****************************************************************/
        print "\n<script language=\"javascript\" type=\"text/javascript
\">
      <!--
      // Get the HTTP Object
      function getHTTPObject(){
      if (window.ActiveXObject) return new
ActiveXObject(\"Microsoft.XMLHTTP\");
      else if (window.XMLHttpRequest) return new XMLHttpRequest();
      else {
      alert(\"Your browser does not support AJAX.\");
      return null;
      }
      }
      // Change the value of the outputText field
      function setOutput(){
      if(httpObject.readyState == 4){
      document.getElementById('$nomeDiv').innerHTML =
httpObject.responseText;
      }
      }
      function timed(){
                        setInterval(\"doWork()\", $microtime)
          }
      // Implement business logic
      function doWork(){
      httpObject = getHTTPObject();
      if (httpObject != null) {
      httpObject.open(\"GET\", \"$pageToRefresh\");
      httpObject.send(null);
      httpObject.onreadystatechange = setOutput;
      }
      }
      var httpObject = null;
      //-->
        </script>";

       httpObject.onreadystatechange = setOutput; }
Metti onreadystatechange PRIMA della open (importante). Nella open 
esplicita true come terzo parametro (questo solo per sicurezza, non 
ricordo quale sia il default).


Ciao! Ho fatto entrambe le cose che mi hai detto. Ho messo un alert
ogni volta che mi carica la pagina in questo modo:
 function setOutput(){
      if(httpObject.readyState == 4){
      document.getElementById('$nomeDiv').innerHTML =
httpObject.responseText;
	  alert(\"DIV: $nomeDiv.\");
      }
L'alert mi viene fuori solo in una e non nell'altra. Nel senso che nel
div "corpo" viene fuori, e mi carica anche la pagina (ma con un
comportamento sbagliato, nel senso che non mi funziona il codice
jquery) nel div "online" invece mi funziona il codice javascript che
c'è nel div prima del caricamento della pagina, e poi mi rimane quel
codice, senza che mi carichi la pagina. Insomma la pagina non viene
caricata anche se compare per prima nell'html.
Guarda che è proprio strano!! volevo fare questo codice per un sacco
di pagine e renderizzare il tutto in un'unica pagina.. anche per una
più facile manutenzione, ma proprio non vuole saperne. L'unica
differenza che ho notato nel codice è che inizialmente il div che mi
funziona in parte non contiene codice di alcun tipo, invece quello che
proprio non mi funziona contiene codice javascript (quello che fa
funzionare la casella di testro del "caricamento in corso". Magari non
c'entra ma è l'unica differenza che c'è tra i due DIV.
Qualche idea?
Grazie mille per l'aiuto!!
Grazie a tutti!
Ciao!!
Quindi ho pensato che magari non mi prendeva i microtime o qualcosa
del genere..