Ich habe ein PHP-Skript, die mir eine Zeichenfolge nach dem Parsen eines DOM aus einer HTML-Datei zurückgeben.XMLHttpRequest funktioniert nicht im asynchronen Modus, wenn mein PHP-Code DOMDocument :: loadHTMLFile verwendet
parserFunctions.php (Ich habe gerade angezeigt nützliche Funktionen):
<?php
function initPagesToParse($Path){
define('MESSAGES_BY_PAGE', 20);
$Docs[0] = new DOMDocument();
$Docs[0]->loadHTMLFile($Path);
$numberOfPages = getMessageNumber($Docs[0])/MESSAGES_BY_PAGE;
if($numberOfPages > 1){
for($i = 1; $i < $numberOfPages; $i++){
$startPost = $i * MESSAGES_BY_PAGE;
$Docs[$startPost] = new DOMDocument();
$Docs[$startPost]->loadHTMLFile($Path . '&start=' . $i);
}
}
return $Docs;
}
function runParser($Path){
$Result = '';
foreach(initPagesToParse($Path) as $Doc) {
$Result = $Result . getVoteIDsFromDocument($Doc);
}
if($Result == ''){
return FALSE;
}
$FileID = uniqid('Vote_IDs_', TRUE);
if(file_put_contents ('VoteIDs_files/' . $FileID . '.txt', $Result, LOCK_EX) === FALSE){
return FALSE;
}
return $FileID;
}
?>
parserMain.php:
<?php
include 'parserFunctions.php';
error_log("Parsing \n");
if(!isset($_POST["URL"]) || $_POST["URL"] == null) {
echo 'REQ ERROR';
exit();
}
$url = $_POST["URL"];
if(($FileID = runParser($url)) === FALSE){
echo 'PARSING ERROR';
exit();
}
error_log($url);
error_log($FileID);
echo $FileID;
?>
Und diese Zeichenfolge ich eine HTML-Seite mit einem haben Javascript zu erhalten, die eine Verwendung XMLHttpRequest, um das Ergebnis zu erhalten.
<script type="text/javascript">
"use strict";
function sendUrlToParser() {
var handleResponse = function (status, response) {
alert(response);
}
var handleStateChange = function() {
switch (xmlhttp.readyState) {
case 0 : // UNINITIALIZED
case 1 : // LOADING
case 2 : // LOADED
case 3 : // INTERACTIVE
break;
case 4 : // COMPLETED
handleResponse(xmlhttp.status, xmlhttp.responseText);
break;
default: alert("error");
}
}
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange = handleStateChange;
xmlhttp.open("POST", "parserMain.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("URL=" + document.getElementById("URL").value);
}
</script>
Wenn ich dieses Skript verwende das Ergebnis meines PHP-Skript zu bekommen, in Asynchron-Modus (true) ich einen Status == 0 erhalten, und ich bekomme eine leere Antwort, während in synchronus Modus (false) Ich erhalte eine Status == 200 und ich kann mein Ergebnis anzeigen.
Nach mehreren Tests habe ich festgestellt, dass nur wenn ich den Parser verwende, dass meine asynchrone Anfrage nicht mehr funktioniert. Wenn das PHP-Skript vor dem runParser stoppt (im Falle einer nicht existierenden Variable zum Beispiel), kann ich eine Antwort bekommen (REQ ERROR in diesem Fall).
Ist mein Problem im Zusammenhang mit der Verwendung von DOMDocument :: loadHTMLFile oder ist das Problem an anderer Stelle?