Witam, pierwszy post :]
Napisałem sobie na prawdę prosty skrypt z formularzem w php, za pomocą którego mogę skanować sobie na urządzeniach w sieci.
Problem w tym, że podczas wykonywania skanu (f. exec()) do momentu zakończenia user nie wie czy coś się dzieje czy nie i jego zachowanie może być nieprzewidywalne...
Nie jestem webmasterem, więc i biegły w php nie jestem, naczytałem się, że w AJAXie można wyświetlić gif
a podczas wczytywania/wysyłania/robienia czegokolwiek przez skrypt na serwerze...Tylko po przeczytaniu paru tutorali dalej nie wiem jak zgrabnie i możliwie prosto to wykonać...
EDIT:
oto do czego doszedłem, niestety dorzucenie w funkcji Skanuj() onLoading wysypuje również funkcję Pokaz()...
formularz i skrypt przetwarzający:
<html>
<head>
<meta http-equiv='Content-type' content='text/html; charset=utf-8' />
<script type='text/javascript' src='advajax.js'></script>
<script type='text/javascript'>
function Pokaz() {
advAJAX.get({
url : 'scanner_status.php',
parameters : {
'skanery' : document.getElementById('skanery').value
},
onSuccess : function(obj) {
document.getElementById('status').innerHTML = obj.responseText;
}
});
}
function Skanuj(frm) {
advAJAX.get({
url : 'skan.php',
parameters : {
'skanery' : frm.skanery.value,
'plik' : frm.plik.value
},
onSuccess : function(obj) {
document.getElementById('status').innerHTML = obj.responseText;
}
});
}
</script>
</head>
<body>
<center>
<br />
<br />
<br />
<br />
<h1>skanery by seba</h1>
<br />
<br />
<!-- <form action='skan.php' method='GET'> -->
<form onsubmit='Skanuj(this); return false'>
wybierz skaner... <select name=skanery id='skanery' onchange='Pokaz()'>
<?php
$wynik = exec("lpstat -v | cut -d':' -f3",&$tablica);
for($i=0; $i<(sizeof($tablica)); $i++){
$nazwa = exec("lpstat -v | grep $tablica[$i] | cut -d' ' -f3 | tr -d ':'");
echo ("<option value=$tablica[$i]> $nazwa");
}
?>
</select><br/>
<br/>
nazwa pliku wyjściowego... <input type=text name=plik><br>
<br />
<div id='status'></div>
<input type=submit value='Skanuj'><br/>
</form></center>
</body>
</html>
Dodam, że funkcje w tej postaci działają poprawnie, znaczy tak jak chcę (bez animacji ładowania).
skan.php
<?php
$plik=$_GET['plik'];
$scan_dev=$_GET['skanery'];
if (empty($plik)) $plik="skan";
$full_output_file="/srv/www/htdocs/sanewi/tmp/".$plik.".jpg";
$output_file=$plik.".jpg";
$tmp_file="/srv/www/htdocs/sanewi/tmp/tmp.tmp";
$command = "scanimage -d hpaio:".$scan_dev." --resolution 300 >".$tmp_file." && convert ".$tmp_file." jpeg:".$full_output_file.
#echo ($command);
exec($command);
#echo ("<a href=\"/sane/tmp/$output_file\">$output_file</a>");
**//header('Content-Type: application/octet-stream');
//header('Content-Disposition: attachment; filename='.$output_file);
//readfile($full_output_file);**
//exec("rm $full_output_file");
echo("zeskanowano");
Gdy formularz był przetwarzany tylko przez php, po zeskanowaniu dzięki pogrubionym liniom dostawałem monit o zapis utworzonego pliku. gdy skorzystałem z przetwarzania przez ajax, nie wiem jakich mechanizmów użyć, by działało to w podobny sposób...