#javascript #ajax #xmlhttprequest
Вопрос:
Я использовал учебник, приведенный здесь, — Руководство по прогрессу загрузки файлов — для загрузки файлов и отслеживания хода загрузки, и это очень хорошее решение, которое прекрасно работает.
Тем не менее, я хочу иметь возможность обработать файл, как только он будет загружен на сервер, и, поскольку это большие файлы, мне нужно обновить пользователя, чтобы он знал, что что-то происходит, пока он ждет.
Я инициализирую использование XMLHttpRequest () let xhr = new XMLHttpRequest();
.
Затем я открываю соединение с помощью xhr.open("POST", "index.php");
.
Затем я определяю свою процедуру выполнения, используя xhr.upload.addEventListener("progress", ({loaded, total}) =>{}
которую, содержит выходные данные для индикатора выполнения.
HTML — форма инкапсулируется let data = new FormData(form);
и затем передается на сервер с помощью xhr.send(data);
.
Все это определено в учебнике.
Однако, похоже, у меня нет никакого способа считывания выходных данных из php-скрипта, который обрабатывает файл на сервере.
Я пытался
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 amp;amp; xhr.status == 200){
console.log(xhr.response);
}
}
Но это не дает никакого результата.
Может ли кто-нибудь предложить способ достижения этой цели?
php-код выглядит так:
$index_number=0;
$output="";
if ($_FILES['file']['error'])){
die('Cannot process file.');
}
$file_name = $_FILES['file']['name'];
$file_dir = "files/".$_POST['dbname']."/";
$tmp_name = $_FILES['file']['tmp_name'];
$query="INSERT INTO drawings (name)VALUES('".$file_name."');";
$mysqli = new mysqli('localhost', 'dwgman', 'fM6#[psL!dwD8XV G1', $_POST['dbname']);
if ($result = $mysqli->query($query)) {
$index_number=$mysqli->insert_id;
}
if(!file_exists($file_dir)){
mkdir($file_dir,0744);
}
move_uploaded_file($tmp_name,$file_dir.$index_number.".sat");
$command="/var/www/html/dfile/stored "."/var/www/html/dfile/".$file_dir.$index_number.".sat ".$_POST['dbname']." ".$index_number;
passthru($command);
Комментарии:
1. какой результат? без PHP-кода мы не можем сказать, какой результат вы ожидаете увидеть.
xhr.response
илиxhr.responseText
являются вероятными кандидатами на чтение ответа сервера2. однако PHP в этом руководстве не отправляет никакого ответа
3. Я отредактировал сообщение, чтобы включить PHP, хотя я не уверен, что оно что-то добавляет. В принципе, у меня есть программа, которая анализирует файл и заполняет базу данных, сообщая о ходе выполнения: 10…20…30… и т. Д. Я хотел бы записать этот вывод, чтобы проинформировать пользователя.
4. где этот код, о котором вы говорите? Я не вижу ничего, что могло бы привести к прогрессу
5. Программа представляет собой скомпилированную программу на языке си, которую я написал и которая использует стороннюю библиотеку для анализа загруженного файла и хранения элементов в базе данных. Программа использует printf для печати чисел: на десятой части пути через файл программа напечатает «10», на полпути через файл программа напечатает «50» и так далее до 100 процентов. Мне нужно получить доступ к этим выводам, чтобы я мог показать пользователю ход выполнения.