我正在使用两个.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);
});
P.S。我确实试过这个Passing $_FILES or $_POST to a new page with PHP,但它不适合我:( SOS。
澄清:我的问题是我想在ajax调用的页面上访问$ _FILE。该文件上传到index.php,表单为action =“#”,因此它会发布到index.php。 post post.php发送一个ajax调用process-csv.php后,我需要在process-csv.php上访问该文件。我不想移动文件,因为我不想清理旧文件。
答案 0 :(得分:1)
所以我认为你没有说过你的问题,但我猜你的问题是你无法找到一个文件。原因是因为您无法在javascript中获取文件信息,因为它存在安全风险。虽然有很多方法可以做到这一点。你可以使用flash或iframe伪造像文件上传这样的ajax。
我实际上喜欢flash版本,因为它让你能够同时上传多个文件,并且仍然可以提供iframe所做的一切以及更多的活动。
http://code.google.com/p/swfupload/
使用uploadComplete,您可以使用然后将您的处理代码和uploadStart用于传递标记,以便将此会话与添加到数据库的文件相关联。
同样在你的处理中,确保你总是传递你已经走了多远,所以它不会每次都返回相同的行。
我希望有所帮助。
答案 1 :(得分:1)
只需在JavaScript中构建数据行:
data: {
startIndex: startIndex,
length: length,
rows: variableWithRows.slice(startIndex, startIndex + length)
},
在PHP内部,所有行都在$_POST['rows']
中作为数组数据。