Я продолжаю получать «Uncaught SyntaxError: Неожиданный конец ввода» в консоли браузера при запуске этого JSON.parse. Я попытался укоротить элемент $ до $ entry, но все равно не добился успеха:
function getFileList() { var elements; var foo = document.getElementById("filelist"); var xhr = new XMLHttpRequest(); xhr.addEventListener("load", complete, true); // foo.innerHTML= xhr.responseText; xhr.onreadystatechange = function () { console.log(JSON.parse(xhr.responseText)); } xhr.open("GET", "php/dir_list.php", true); xhr.send(null); function complete() { eventAssign(); xhr.removeEventListener("load", complete, false); } } <?php $files = array(); if ($handle = opendir('/trunk')) { $i = 0; while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { $element = '<li><a class="files" id="listFile'.$i.'" data-filename="'.$entry.'" href=php/download.php?filename='.$entry.'>'.$entry.'</a></li>'; $checksum = shell_exec("sum /trunk/".$entry); $files[$entry] = array( $element, $checksum ); $i++; } } closedir($handle); } $files = json_encode($files); echo $files; ?>
EDIT: Исправлено вставка getFileList ().
Чтобы избежать путаницы, проблема все еще сохраняется. Вот json-выход из php dir_list.php:
webserver httpfiles # php php / dir_list.php
{"lynx2.8.5rel.1-DOSc.zip":["<li><a class=\"files\" id=\"listFile0\" data-filename=\"lynx2.8.5rel.1-DOSc.zip\" href=php\/download.php?filename=lynx2.8.5rel.1-DOSc.zip>lynx2.8.5rel.1-DOSc.zip<\/a><\/li>","02625 2406\n"],"try.zip":["<li><a class=\"files\" id=\"listFile1\" data-filename=\"try.zip\" href=php\/download.php?filename=try.zip>try.zip<\/a><\/li>","18695 74\n"],"darn.tar.gz":["<li><a class=\"files\" id=\"listFile2\" data-filename=\"darn.tar.gz\" href=php\/download.php?filename=darin.tar.gz>darin.tar.gz<\/a><\/li>","56880 292\n"],"songs.txt":["<li><a class=\"files\" id=\"listFile3\" data-filename=\"songs.txt\" href=php\/download.php?filename=songs.txt>songs.txt<\/a><\/li>","43469 1\n"],"CentOS-6.3-x86_64-minimal-EFI.iso":["<li><a class=\"files\" id=\"listFile4\" data-filename=\"CentOS-6.3-x86_64-minimal-EFI.iso\" href=php\/download.php?filename=CentOS-6.3-x86_64-minimal-EFI.iso>CentOS-6.3-x86_64-minimal-EFI.iso<\/a><\/li>","04152 372736\n"]}
Выяснил вопрос … Я получал повторяющиеся ответы в одном вызове … Я добавил: if (xhr.readyState == 4 && xhr.status == 200) {… и он исправил проблему. Благодарю.