AJAX-вызов возвращает статус 200, но нет содержимого

У меня есть простой вызов AJAX, который извлекает текст из файла, выталкивает его в таблицу и выводит на экран. Вызов работает без проблем при тестировании на Mac с Apache 2.2.26 / PHP 5.3 и в ящике Ubuntu с Apache 2.2.1.6/PHP 5.3. Он не работает на RedHat, запущенном Apache 2.2.4 / PHP 5.1. Естественно, ящик RedHat – это единственное место, где мне нужно, чтобы он работал.

Вызов возвращает 200 OK, но без содержимого. Даже если в файле ничего не найдено (или оно недоступно), заголовок таблицы эхом, поэтому, если разрешения были проблемой, я все равно ожидал бы увидеть что-то. Но, конечно, я подтвердил, что файл доступен для чтения всем пользователям.

Код был отредактирован и упрощен.

Моя функция ajax:

function ajax(page,targetElement,ajaxFunction,getValues) { xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState===4 && xmlhttp.status===200) { document.getElementById(targetElement).innerHTML=xmlhttp.responseText; } }; xmlhttp.open('GET','/appdir/dir/filedir/'+page+'_funcs.php?function='+ajaxFunction+'&'+getValues+'&'+new Date().getTime(),false); xmlhttp.setRequestHeader('cache-control','no-cache'); xmlhttp.send(); } 

Я называю это так:

 ajax('pagename','destelement','load_info'); 

И верните результаты:

 // Custom file handler function warn_error($errno, $errstr) { // Common function for warning-prone functions throw new Exception($errstr, $errno); } function get_file_contents() { // File operation failure would return a warning // So handle specially to suppress the default message set_error_handler('warn_error'); try { $fh = fopen(dirname(dirname(__FILE__))."/datafile.txt","r"); } catch (Exception $e) { // Craft a nice-looking error message and get out of here $info = "<tr><td class=\"center\" colspan=\"9\"><b>Fatal Error: </b>Could not load customer data.</td></tr>"; restore_error_handler(); return $info; } restore_error_handler(); // Got the file so get and return its contents while (!feof($fh)) { $line = fgets($fh); // Be sure to avoid empty lines in our array if (!empty($line)) { $info[] = explode(",",$line); } } fclose($fh); return $info; } function load_info() { // Start the table $content .= "<table> <th>Head1</th> <th>Head2</th> <th>Head3</th> <th>Head4</th>"; // Get the data // Returns all contents in an array if successful, // Returns an error string if it fails $info = get_file_contents(); if (!is_array($info)) { // String was returned because of an error echo $content.$info; exit(); } // Got valid data array, so loop through it to build the table foreach ($info as $detail) { list($field1,$field2,$field3,$field4) = $detail; $content .= "<tr> <td>$field1</td> <td>$field2</td> <td>$field3</td> <td>$field4</td> </tr>"; } $content .= "</table>"; echo $content; } 

Там, где это работает, заголовок ответа указывает соединение как keep-alive; где он не работает, соединение закрывается. Я не знаю, если это имеет значение.

Я просмотрел все SO и сеть для некоторых подсказок, но проблемы «без содержания» неизменно указывают на проблемы политики одного и того же происхождения. В моем случае все содержимое находится на одном сервере.

Я не понимаю, что делать / где искать дальше.

Solutions Collecting From Web of "AJAX-вызов возвращает статус 200, но нет содержимого"