Newsgroup: it.lavoro.professioni.webmaster
Titolo: javascript per catturare output file php

ho creato il seguente file php (test.php):
 
<?php
	echo 123;
?>
 
l'ho incluso in una pagina html usando un iframe:
 
<iframe src="test.php">
</iframe>
 
e naturalmente l'output prodotto è un iframe con all'interno 
visualizzato il numero "123".
 
Adesso mi chiedo se c'è un modo per "elaborare" questo output, tramite 
ad esempio un javascript.
In pratica vorrei sapere se esiste una funzione per poter catturare 
l'output, cioè qualcosa tipo:
 
<script language="javascript>
	if (CatturaOutput("test.php")==123) {
		//fai qualcosa
	}
</script>
 
Mi sono spiegato?


Quello che cerchi di fare normalmente si fa senza necessità di iframe
 
Crei una pagina php raggiungibile ad un url xyz.php?par=1&par2=5
Nella pagina fai tutte le tue elucubrazioni e emetti solo il contenuto 
che vuoi trasferire alla pagina, che sia html o json o testo crudo
 
Dalla pagina "esterna" chiami xyz.php tramite $.get() di jquery (o 
equivalenti chiamate di altri framework
 
Nel $.get() puoi specificare una funzione di callback alla quale viene 
automaticamente passato in firma il contenuto della risposta, a quel 
punto ce l'hai in una variabile javascript e ne fai quel che te ne pare
 
M
 
-- 
I fatti mi cosano

 se esiste una funzione per poter catturare l'output
 
XMLHttpRequest


	xml=new XMLHttpRequest;
	xml.open("GET","test.php")
	xml.send(null);
 
	document.write(xml.responseText);
 
però non vedo nessun output...

 Crei una pagina php raggiungibile ad un url xyz.php?par=1&par2=5
 
il file php si trova su un server esterno, per cui non posso mettere mano


Se è esterno allora non andrà per problemi di XSS
Guardati cos'è e vedi se è il tuo caso
Di solito si risolve usando un qualcosa lato tuo che faccia da proxy


Posto il codice jquery:
 
$.ajax({
url: 'test.php',
dataType: 'html',
beforeSend: function(a){
// azione prima di inviare, per esempio "attendere prego" 
},
success: function(a){
if (a=='123') {
// ecc..
}
},
error: function(a,b,c){
// azione in caso di mancato collegamento
},
complete: function(a,b){
// azione dopo l' invio, per esempio cancella "attendere prego" 
}
});

 però non vedo nessun output...
 
xml.responseText e` il tuo output.
 
Bye.
 


perdonare l'ignoraza!!!
tale codice dova va inserito (file html, js, php)?


document.write(xml.responseText);
dovrebbe apparire 123, ma non appare

 dovrebbe apparire 123, ma non appare
 
XMLHttpRequest fa chiamate asincrone.
Sei sicuro di aver controllato lo stato della chiamata e l'eventuale 
codice di errore ritornato, prima di stampare il risultato?
 
Se il codice che riporti e` tutto quello che hai scritto, ti torna null 
perché a quel punto (dopo pochi milionesimi di secondo) non ha ancora 
ricevuto risposta dal server.
 
Usa jQuery per fare gli esperimenti, ti semplifica molto la vita.
 
Bye.
 

 ricevuto risposta dal server.
 
<html>
<body>
<script type="text/javascript">
	xml=new XMLHttpRequest;
 
	xml.open("GET","test.php")
	xml.send(null);
 
	while (xml.readyState==1) {
		//qui avviene il blocco
	}
 
   	document.write(xml.responseText);
</script>
</body>
</html>
 
dunque ho capito che xml.readyState rimane sempre uguale a 1, quindi il 
while gira all'infinito...
Ma perchè?

 Ma perchè?
 
Perche` e` asincrona, e tu stai bloccando il browser in un ciclo infinito.
Probabilmente Chrome e Firefox ti chiedono di stoppare gli script dopo 
qualche secondo in quel while.
 
Come ti ho detto, usa jQuery (o simili) per semplificarti la vita, oppure 
almeno leggi qui il modo corretto per fare le chiamate asincrone:
 
<
http://www.webmasterpoint.org/programmazione/programmazione/ajax/come-
 
fare-chiamata.html>
 
Bye.

Prova così:
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
">
<head>
<title>Prova Ajax</title>
<meta http-equiv="Content-Language" content="English" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="//
ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js
" type="text/javascript"></script>
</script>
<script type="text/javascript">
$(function() {
$.ajax({ 
url: 'test.php', 
dataType: 'html', 
beforeSend: function(a){ 
$('#div_attendi').html('attendere prego'); 
}, 
success: function(a){ 
if (a=='123') { 
$('#div_di_prova').html('<h1>Funziona</h1>'); 
} 
}, 
error: function(a,b,c){ 
alert('Collegamento interrotto'); 
}, 
complete: function(a,b){ 
$('#div_attendi').html(''); 
}
}); 
});
</script>
</head>
<body>
<div id="div_attendi"></div>
<div id="div_di_prova"></div>
</body>
</html>