在执行处理图片的长PHP脚本时,我需要在我的ajax进度条上提供建议。 我知道有很多关于stackoverflow的问题,比如
我看到的大多数示例都使用文件大小来计算进度。
但在我的情况下,我想根据images_treated / total_images
计算百分比。
所以我仍然无法按照自己的意愿做这项工作。
在JS轰鸣声中,我评论了我从另一个问题和dataType: 'json'
进行测试的非工作进度函数,但我更喜欢我仍然可以使用JSON返回。
问题
使用Javascript:
$.ajax(
{
type: 'GET',
// dataType: 'json',
url: formAction,
data: 'addImagesToArticle',
cache: false,
xhr: function()
{
var xhr = new window.XMLHttpRequest();
// Download progress.
xhr.addEventListener("progress", function(e)
{
console.log(e);
// I saw this piece of code from another question it is supposed to work... Maybe my PHP?
/*var lines = e.currentTarget.response.split("\n");
var progress = lines.length ? lines[lines.length-1] : 0;
$('#progress').text(progress);*/
}, false);
return xhr;
}
});
我的PHP非常大,所以我只是快速解释一下:在pics的循环中我有变量$images_treated
和$total_images
。在循环之后,在{error: bool, message: string, ...}
之类的对象中通过JSON将摘要返回给JS,所以如果有一种方法可以使进度工作而不回显但是设置一个完美的JSON变量!
感谢您的帮助!
[编辑]添加上下文详细信息。
我想在管理方面使用它,在带有WYSIWYG的文章版本中,我有dropzone处理我的多个图像上传。
然后我看到图像的预览,而每个图像都放在服务器上的临时文件夹中。然后我可以根据需要删除一些图像,一旦所有图像都是确定的,我点击一个按钮来处理它们以调整2个尺寸并在文章WYSIWYG编辑器中用img注入图形标记。
答案 0 :(得分:0)
Waw我找到了解决方案!
我很高兴发现我不了解PHP的新内容,并与那些也不知道的人分享(在下面的步骤3中)!
@riccardo谈论套接字是对的 - 我不太了解 - 但我不需要那么远。
因此,在能够更接近目标之前,我需要解决多项问题。
不使用xhr.addEventListener("progress"...
,而是在计时器中使用第二个ajax:它在资源消耗方面的重量也会更轻。
而不是使用像setInterval
或setTimeout
这样的计时器 - 因为请求是异步的,它可能会以不需要的顺序出现 - 在第一次调用的回调中使用递归调用,如:
function trackProgress()
{
$.getJSON('create-a-new-page.html', 'ajaxTrackProgress=1', function(response)
{
var progress = response.progress;
$('#progress').text(progress);
if (progress < 100) trackProgress();
});
}
然后意识到我的第二个脚本调用因第一个脚本仍在运行而延迟了?是。所以这里的关键是session_write_close()
!
由于这个好帖子,我可以用这种方式挖掘:
https://stackoverflow.com/a/1430921/2012407
我在这里发布了一个非常简单的例子来回复另一个问题:https://stackoverflow.com/a/38334673/2012407
感谢您在评论中提供的所有帮助,这让我得到了这个解决方案。 ;)