PDA

View Full Version : [ajax - php] errore ajax.status = 0


frank10
02-12-2010, 17:53
Ho letto un po' su Ajax e volevo fare uno script che si collega a un server per leggere un testo o ricevere il valore di una variabile.

Lato client ho:


<script type="text/javascript" src="utility.js"></script>

<script type="text/javascript">
var doc = document, win = window;

function Ricevi() {

caricaTesto('indirizzoMioServer/public/Files/PHP/content.php&action=art');

function caricaTesto(nomeFile) {

// assegnazione oggetto XMLHttpRequest con controllo browser:
ajax = assegnaXMLHttpRequest();

// assegnazione elemento del documento
elemento = prendiElementoDaId("p_francesco");


// se l'oggetto XMLHttpRequest non è nullo
if(ajax) {


// impostazione richiesta asincrona in GET
// del file specificato
ajax.open("get", nomeFile, true);

// rimozione dell'header "connection" come "keep alive"
ajax.setRequestHeader("connection", "close");

// impostazione controllo e stato della richiesta
ajax.onreadystatechange = function() {

// verifica dello stato
if(ajax.readyState === readyState.COMPLETATO) {

// verifica della risposta da parte del server
if(statusText[ajax.status] === "OK")
// operazione avvenuta con successo
elemento.innerHTML = ajax.responseText;
else {
// errore di caricamento
elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />";
elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
}
}
}
}
// invio richiesta
ajax.send(null);
} //end carica testo


}
</script>
</head>
<body>

<div >
<p onClick="Ricevi();" id="p_francesco">
prova
</p>
<div>

</body>
</html>


Lato server, ho il file content.php:

<?php
switch($_REQUEST['action']) {
case 'art': $content = "art";break;
case 'bio': $content = "bio";break;
case 'client': $content = "client";break;
case 'pfolio': $content = "pfolio";break;
case 'mail': $content = "mail";break;
}

?>

Mettendo la stessa url nell'indirizzo del browser il file è accessibile.

ajax.readyState è 4, mentre
ajax.status mi dà = 0, invece che 200

Che errore è?

frank10
02-12-2010, 22:05
Ho scoperto che su IE mi dà errore 404, mentre su Firefox mi dà 0 ...

Avevo scambiato una & con il ? nella query...

Però ora su IE funziona bene, mentre su Firefox continua a darmi errore 0 e non mi mostra il risultato.

Ho provato anche con metodo POST e IE è ok, mentre Firefox mi continua a dare ajax.status=0.

Quale problema potrebbe avere Firefox?

SnaKeZ83
03-12-2010, 06:42
Se posso darti uno consiglio spassionato, usa jQuery piuttosto che programmare in "Javascript puro", in questo modo eviti problemi di cross-browsing.
Inoltre il tutto ti risulterà mooooooooooooooolto più semplice e così potrai concentrarti di più sulla logica dell'applicazione (piuttosto che perderti in tecnicismi).

frank10
03-12-2010, 18:30
Grazie mille del consiglio Snake.
Avevo guardato un po' tutto, ma jQuery ancora no.
E' molto potente e semplice da usare.
Adesso lo controllo meglio anche per Ajax.

bobbytre
03-12-2010, 19:36
io preferisco Prototype a JQuery :O

frank10
04-12-2010, 09:53
Allora, ho provato con jQuery, ma ho problemi anche lì:

il mio php è :
<?php
switch($_REQUEST['action']) {
case 'art': $content = "art";break;
case 'bio': $content = "bio";break;
}

echo $_POST['action'];

?>

con GET:
$.get("mioIndirizzo/public/Files/PHP/content.php", {action:"art"},
function(data) {
$("#p_francesco").html(data);
});
In IE6 e Firefox3.6, mi danno entrambi risultato "".

con POST:
("mioIndirizzo/public/Files/PHP/content.php", {action:"art"},
function(data) {
$("#p_francesco").html(data);
});

in IE6 mi dà art correttamente, in Firefox invece continua a darmi "".

Ho provato anche:
$('#p_francesco').load("mioIndirizzo/public/Files/PHP/content.php", {action:"art"});

che è un POST: IE ok, Firefox no.

e, credo(?), con GET
$('#p_francesco').load("mioIndirizzo/public/Files/PHP/content.php", action="art");

Non va in nessuno dei due.

e anche:
$.ajax({
url : "mioIndirizzo/public/Files/PHP/content.php", //
data : 'action=art',

success : function (data,stato) {
$("#p_francesco").html(data);
$("#p_francesco1").text(stato);
},
error : function (richiesta,stato,errori) {
alert("E' evvenuto un errore. Il stato della chiamata: "+stato);
}
});
E entrambi i browser mi danno risposta="" e stato = "success".

Insomma non ci siamo.
Riassumendo mi funziona solo qualche chiamata in post solo con IE6.
Qualcuno mi illumina con jQuery? Grazie.