【问题标题】:Uploading and processing a file with PHP and Ajax使用 PHP 和 Ajax 上传和处理文件
【发布时间】:2012-06-11 02:24:50
【问题描述】:

我想建立一个允许我上传文件的网站,然后实时显示处理文件的进度。客户端将上传一个分隔文件。上传后,我将验证数据中的标题/列。如果这遵循给定的模板,那么我将一次处理一行,并希望在发生这种情况时向用户提供实时反馈。我知道 PHP 是在获取请求时运行的,因此我认为这种方法需要 ajax 来实现我的目标。我该怎么做这样的事情。任何伪代码、示例或教程将不胜感激。

【问题讨论】:

    标签: php jquery ajax file-upload upload


    【解决方案1】:

    我过去做过类似的事情。你需要做的是开始文件处理。在设定的时间间隔(例如一秒)之后,您可以使用 ajax 调用轮询服务器以查看处理文件的进度。

    顺便说一句,我推荐jqueryUI progressbar 用于进度条,uploadify 用于上传器。

    Javascript

    setTimeout("UpdateProgressBar();", 1000);
    
    $.ajax({
        type: "POST",
        async: true,
        data: // params go here
        url: // path to web method
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
             // Do stuff when file is finished processing
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            if (errorThrown != null)
                alert(textStatus + " : " + errorThrown);
        }
    });
    
    function UpdateProgressBar() {
        $.ajax({
            type: "POST",
            async: true,
            data: // my params go here
            url: // path to web method
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {
                var totalRecords = result.d.TotalRecords;
                var recordsProcessed = result.d.RecordsProcessed;
                var percentProcessed = pagesProcessed / totalRecords;
    
                $('#div_ProgressBar').progressbar("value", percentProcessed);
    
                if (recordsProcessed < totalRecords)
                    setTimeout("UpdateProgressBar();", 800);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                if (errorThrown != null)
                    alert(textStatus + " : " + errorThrown);
            }
        });
    

    【讨论】:

    • 太棒了,这就是我要找的东西!
    • 对不起。我不明白你的剧本。两个函数中的“data”和“url”相同或不同。
    • @Hueston 他们的网址和数据都被假定为不同的,因为您应该调用 2 个不同的网络方法。一个用于启动进程,另一个用于 ping 初始更新。
    • 如果您有示例详细信息,那就太好了。也许它花了你的时间。 success: function (result) { // 文件处理完毕后做的事情 },你这里调用uploadify ?
    • @Huestib Uploadify 有一个内置的进度条,还有许多其他好的文件上传器也已经内置了一个进度条。听起来你需要使用它已经提供的东西。在这个问题中,op指的是文件上传后的处理;因此,我的回答是为了解决这个问题。
    猜你喜欢
    • 2013-12-28
    • 2014-05-02
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多