2014-12-06 37 views
0

我是网络编程的新手,所以请耐心等待。等待完成PHP处理的最佳方法

我创建了一个提交表单数据到PHP exec()函数的网页。该功能从网站请求数据(一次或多次),以各种方式处理数据,并将其粘贴到我的Web服务器上的文件中。在处理时,网页上会出现一个加载器.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(); 
    } 
} 

我想在这里做的是对外部网站处理/操作一次,等待处理完成。 “获取”函数检查是否已创建我的输出文件。如果有,处理结束。

这是一个程序化的方法来解决这个问题吗?有替代品会好得多吗?

我将不胜感激任何洞察力,你可以提供。我真的很想学习正确的做事方式。

+0

10FPS太多了,下降到3或4.或者只是睡眠()+在PHP循环等待,直到它没有完成轮询。 – dandavis 2014-12-06 23:41:03

回答

0

我尽量让HTTP请求的简单解释...

起初,你有一个Web服务器的后端代码,你的情况用PHP编写的。这个脚本不会执行其他任何操作,然后处理发送给它的数据,并可能发布(回显)失败,或将其处理成功返回到前端客户端。在你的情况下,这一切。

在前端方面它几乎相同的程序,无论您采取的语言或设备。

您在异步任务中调用HTTP POST或GET请求,在您的情况下,jQuery通过将它的$ .ajax函数调用到您的php来为您执行此操作。

同样在那个请求中,你定义了一个回调函数,在异步处理完成后,它将被自动调用。 jQuery也为你做了这个,它的.done()函数就在$ .ajax之后。

为了指示载荷,最好的办法是显示您加载图片的代码$就前行权......而隐藏或删除其中,.done()函数中...为了表示加载完成...

就是这样。