2010-12-14 13 views
1

Ich habe die folgende generische Funktion Ajax:PHP kehrt nie Readystate 4 oder Status 200 in Ajax

//run post request 
function ajaxPost (divid, parameters, file) { 

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } else {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

xmlhttp.onreadystatechange=function() { 
    alert ("ok") 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     alert ("ready"); 
     alert (xmlhttp.responseText); 
    divid.innerHTML=xmlhttp.responseText; 
    } 
    } 

    xmlhttp.open("POST", file,true); 

    //Send the proper header information along with the request 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.setRequestHeader("Content-length", parameters.length); 
xmlhttp.setRequestHeader("Connection", "close"); 



xmlhttp.send(parameters); 
} 

Das Problem ist, dass dieser Abschnitt nicht wie erwartet funktioniert:

xmlhttp.onreadystatechange=function() { 
    alert ("ok") 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     alert ("ready"); 
     alert (xmlhttp.responseText); 
    divid.innerHTML=xmlhttp.responseText; 
    } 
    } 

Im Browser I bekomme mehr "ok" Warnungen wie ich erwartet habe, aber die Anweisungen in der if Anweisung werden niemals ausgelöst. Ich nehme an, dass der php Statusupdates zurückgibt, aber aus irgendeinem Grund keine fertigen Codes zurückgibt. Wie das passieren kann - ich habe keine Ahnung.

Kann mir jemand sagen, warum ich die fertigen Codes nicht bekommen würde?

Die PHP selbst ist nicht das Problem:

<?php 

echo "new"; 

?> 

ich die Funktion Eingang getestet (divid, Parameter und Datei), und diese sind in Ordnung. Diese Funktion funktionierte bisher in einem separaten Projekt.

+0

So geht es nur bis Zustand 3? Überprüfen Sie die verschiedenen Werte von 'readyState' ... –

+0

@Felix King hat das gerade getestet. Es erreicht den Zustand 4, aber der Status kehrt unmittelbar danach 404 zurück. – YsoL8

+0

Überprüfen Sie auch 'Status'. Vielleicht bekommst du einen 404. Edit: los gehts. –

Antwort

0

Ich würde eine Vermutung riskieren, dass Ihr Server keine gültige 200 Antwort zurückgibt, daher wird die if-Anweisung xmlhttp.readyState == 4 && xmlhttp.status == 200 niemals wahr gleichsetzen.

Versuchen Sie mit Firebug zu sehen, welche Anfrage (falls vorhanden) und welche Antwort erhalten Sie zurück. Wenn Sie Firefox nicht verwenden, versuchen Sie es mit einem Proxy-Tool wie Charles.

Darüber hinaus würde ich sehr empfehlen, eine stabile Open-Source-Javascript-Bibliothek wie jQuery zu verwenden. Dies beinhaltet unter anderem AJAX-Code, der strengstens getestet wurde. Dies wird nicht nur Zeit sparen, wird es weitere Möglichkeit von Fehlern aus Ihrem eigenen Code zu beseitigen, zum Beispiel

$.get('url.php', function(data) { 
    // 'data' is responseText 
}); 
0

xmlhttp.readyState & & xmlhttp.status auf dem Browser abhängig verwendet, nicht der PHP-Skript. Im schlimmsten Fall wird das PHP-Skript möglicherweise nicht wiederhergestellt Status 200, und wenn dies passiert bedeutet, dass Sie entweder einen Fehler in Ihrem Skript haben (manchmal führt dies zu Status 500) oder der Server returnr a 404. Versuchen Sie in jedem Fall, direkt auf die URL zuzugreifen, oder suchen Sie im Firebug-Protokollfenster nach, es ist möglicherweise einfacher zu debuggen.

1
xmlhttp.open("POST", file,true); 

Datei ist URL richtig?
versuchen, von dieser URL zu echo.

-1

Entschuldigung, aber das Problem ist sehr einfach. Es hat eine ganze Woche gedauert.

xmlhttp ist nicht dasselbe wie xmlHttp.

+0

Bitte schreiben Sie dies als Kommentar. –