1

我有两个正在使用的 .php 页面。Index.php 有一个回传到 index.php 的文件上传表单。提交表单后,我可以在 index.php 上访问 $_FILES 没问题。

我的问题是我希望(在表单提交和页面加载之后)使用 .ajax (jQuery) 调用另一个 .php 文件,以便该文件可以打开并处理一些行并将结果返回给 ajax。ajax 然后显示结果并递归调用自身来处理下一批行。

基本上我想以块的形式处理(放入数据库等)csv并在块之间为用户显示它。我这样做是因为文件有 400,000+ 行,用户不想等待 10+ 分钟来处理它们。

我不想移动这个文件(保存它),因为我只需要处理它并把它扔掉,如果用户在处理文件时关闭页面,它不会被扔掉。我可以 cron 编写脚本,但我不想。

我真正想做的是通过 .ajax 传递(单个)$_FILES 或将其保存在 $_POST 或 $_SESSION 中以在第二页上使用。

我的事业有希望吗?

如果有帮助,继承 ajax 代码:

    function processCSV(startIndex, length)
    {
        $.ajax({ 
            url: "ajax-targets/process-csv.php", 
            dataType: "json",
            type: "POST",
            data: { startIndex: startIndex, length: length },
            timeout: 60000, // 1000 = 1 sec
            success: function(data) {
                // JQuery to display the rows from the CSV

                var newStart = startIndex+length;
                if(newStart <= data['csvNumRows']) {
                    processCSV(newStart, length);
                }
            }
        });
    }
    processCSV(1, 2);
});

PS我确实尝试过使用PHP将$_FILES或$_POST传递到新页面,但它对我不起作用:(SOS。

澄清一下:我的问题是我想访问由 ajax 调用的页面上的 $_FILE 。该文件上传到 index.php,表单为 action="#",因此它发布到 index.php。在发布 index.php 向 process-csv.php 发送 ajax 调用后,我需要在 process-csv.php 上可以访问该文件。我不想移动文件,因为我不想清理旧文件。

4

2 回答 2

1

所以我不认为你曾经说过你的问题,但我猜你的问题是你无法 ajax 文件。这样做的原因是因为您实际上无法在 javascript 中获取文件信息,因为它存在安全风险。不过,有很多方法可以做到这一点。您可以使用 flash 或 iframe 来伪造文件上传之类的 ajax。

jQuery iframe 文件上传

我实际上喜欢 Flash 版本,因为它使您能够一次上传多个文件,并且仍然提供 iframe 所做的一切以及更多事件。

http://code.google.com/p/swfupload/

使用uploadComplete,您可以使用然后放置您拥有的处理代码,并使用uploadStart 传递一个标记,表示将此会话与添加到数据库的文件链接起来。

此外,在您的处理过程中,请确保您始终传递您已经走了多远,因此它不会每次都返回相同的行。

我希望这会有所帮助。

于 2012-12-13T23:20:14.153 回答
1

只需在 JavaScript 中构造数据行,然后:

data: { 
    startIndex: startIndex, 
    length: length, 
    rows: variableWithRows.slice(startIndex, startIndex + length)
},

在 PHP 中,所有行都将$_POST['rows']作为数组数据。

于 2012-12-13T23:24:52.607 回答