【发布时间】:2013-11-05 11:12:34
【问题描述】:
我正在尝试获取正在复制的文件的进度
最初我使用下面的代码发送一个复制文件的请求。一旦创建了文件。我发送响应 success=1 并开始复制过程并调用 getProgress
$.ajax({
url:'copyFile.php',
type: 'post',
dataType: 'json',
data: {'data':someData},
success: function(data) {
if(data.success){
progressIndex=setInterval(getProgress, 1000 );
}
},
error:function(err){
console.log(err);
}
});
function getProgress(){
$.ajax({
url:'FileUploadProgress.php',
type: 'post',
dataType: 'json',
data: {'progress':'1'},
success: function(data) {
if(!data.success){
clearTimeout(progressIndex);
}
},
error:function(err){
console.log(err);
}
});
}
文件上传进度.php
class FileUploadProgress{
private $filename;
private $progress;
public function setfileProgress($filename,$progress){
$this->filename=$filename;
$this->progress=$progress;
}
function returnProgress(){
if(empty($this->filename) || empty($this->progress)){
echo json_encode(array('success'=>'0'));
}else{
echo json_encode(array('success'=>1,'filename'=>$this->filename,'progress'=>$this-
>progress));
}
}
}
$fileuploadprogress=new FileUploadProgress;
if($_POST['progress']){
$fileuploadprogress->returnProgress();
}
在复制时获取进度并调用函数setfileProgress 设置进度。同样在客户端,我已请求进度,但我得到的是成功 = 0 并且 $this->progress 为空 我的代码中是否缺少任何内容。请告诉我
【问题讨论】:
-
这不是一个单独使用 php 的简单工作。您必须了解,每次执行后一切都会丢失。因此,在每次 ajax 调用时都会创建一个新的 FileUploadProgress 实例,而女巫无法访问之前的实例属性,可以将其视为每次 ajax 调用时都会启动一个新程序。
-
好的,是的!所以我可以在复制之前创建实例并将其作为响应发送回客户端。然后传递那个实例来获取进度?
-
@PoelincaDorin 或者我可以使用单例模式来检查是否只创建了一个实例?
-
单例模式仅适用于当前请求,正如我之前提到的,您需要一个后台服务来查询,或者正如 Nagh 提到的,使用 Session 女巫在请求中是持久的。
标签: javascript php jquery