나는 웹 프로그래밍에 익숙하지 않으므로 나와 함께하시기 바랍니다.완성 된 PHP 처리를 기다리는 최선의 방법
폼 데이터를 PHP exec() 함수에 제출하는 웹 페이지를 만들었습니다. 이 함수는 웹 사이트에서 데이터를 한 번 또는 여러 번 요청하고 다양한 방법으로 데이터를 조작 한 다음 웹 서버의 파일에 저장합니다. 처리하는 동안 로더 .gif 파일이 웹 페이지에 나타납니다. 프로세스 대기 기간을 처리 할 JavaScript 코드를 만들었지 만 올바르게 처리하고 있는지 확신 할 수 없습니다. 다음과 같이 스크립트입니다 :
<script>
window.set = 0;
window.uid = '';
document.forms[0].onsubmit = function(e)
{
console.log($(this).serialize());
e.preventDefault();
e.stopPropagation();
// Display "Waiting" .gif during processing
$('#loader').show();
// Perform data submission once (when window.set = 0). After that,
// keep waiting for output and manifest file to be created. Call
// "fetch" function repeatedly to test for completion. When completed,
// call clearInterval to stop processing.
window.int_ = setInterval(function()
{
$.ajax({
"url": "./",
"type": "POST",
"data": !window.set ?$("#form").serialize() : { 'fetch': 1, 'uid': window.uid }}).done(function(data)
{
var d = data = JSON.parse(data);
if (!window.set)
{
window.uid = d.uid;
window.set = 1;
return;
}
if (data.status === 'ok')
{
document.location.replace(data.href);
data.manifest = data.manifest.replace(/\./g, ".<br />");
$('#manifest').show();
$('#manifest').html("<b>Results from run:</b> <br />" + data.manifest);
$('#loader').hide();
window.set = 0;
window.uid = '';
clearInterval(window.int_);
}
else
{
// waiting
}
});
}, 100);
}
</script>
다음과 같이 첫 번째 AJAX 호출에 언급 된 "가져 오기"기능에 대한 코드는 다음과 같습니다
if ($_POST['fetch'])
{
$uid = $_POST['uid'];
/* check for availability*/
if (is_file(realpath("./$uid")))
{
$f = file_get_contents($uid);
$m = file_get_contents("./$uid.manifest");
}
else
{
$f = "";
}
if ($f != "")
{
echo json_encode(array("status" => "ok", "href" => $f, "manifest" => $m));
die();
}
else
{
echo json_encode(array("status" => "err", "href" => $f));
die();
}
}
은 내가 여기하려고 노력하고있어 수행하는 외부 처리가 완료 될 때까지 기다리는 동안 한 번 웹 사이트 처리/조작. "fetch"함수는 출력 파일이 생성되었는지 확인합니다. 있으면 처리가 끝납니다.
프로그래밍 방식으로이 문제를 해결할 수 있습니까? 훨씬 더 나은 대안이 있습니까?
귀하가 제공 할 수있는 통찰력에 대해 크게 감사드립니다. 나는 정말로 일을하는 올바른 방법을 배우고 싶다.
10FPS가 너무 많아서 3 또는 4 단계로 내려갑니다. 아니면 그냥 polling하지 않고도 완료 될 때까지 PHP에서 sleep() + loop를 반복하십시오. – dandavis