HTML 파일에서 DOM을 구문 분석 한 후 문자열을 반환하는 PHP 스크립트가 있습니다.내 PHP 코드가 DOMDocument :: loadHTMLFile을 사용할 때 XMLHttpRequest가 비동기 모드에서 작동하지 않습니다.
parserFunctions.php (난 그냥 표시 한 유용한 기능) :
<?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;
?>
그리고 나는를 사용하는 자바 스크립트와 HTML 페이지가이 문자열을 얻을 수 XMLHttpRequest를 사용하여 결과를 얻습니다. 내가 asynchronus 모드에서, 내 PHP 스크립트의 결과를 얻기 위해이 스크립트를 사용하는 경우
<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>
이 (사실이) 나는 상태 == 0을 얻고 나는 동안 SYNCHRONUS 모드에서 빈 응답을 얻을 (false)를 내가 얻을 status == 200이고 결과를 표시 할 수 있습니다.
필자가 여러 번 테스트 한 결과 파서를 사용하여 비동기 요청이 작동을 멈췄을 때만 나타났습니다. PHP 스크립트가 runParser (예 : 존재하지 않는 변수의 경우) 이전에 중지되면 대답을 얻을 수 있습니다 (이 경우 REQ ERROR).
내 문제는 DOMDocument :: loadHTMLFile 사용과 관련되어 있습니까? 아니면 다른 곳에서 문제가 있습니까?