jQuery 递归函数上传许多文件,同时给用户一些反馈

发布于 2024-08-29 07:53:12 字数 622 浏览 3 评论 0原文

我正在尝试编写一个 jQuery 函数来让用户一次上传多个文件。这是我认为可以向用户提供有关上传过程进度的一些反馈的功能。

function uploadFiles(numbersOfFiles, start) {
   $("#info").html(start + " files uploaded");
   $.post('upload.php', {
      start: start
   }, function (data) {
      start += 5;
      if (start < numbersOfFiles) {
         uploadFiles(numbersOfFiles, start);
      } else {
         $("#info").html("All files have been uploaded");
      }
   });
}

该函数调用一个 php 脚本来上传 5 个文件,然后如果还有更多文件要上传,它会再次调用该脚本。整个过程有效。我已经用 100 个文件尝试过了。唯一不起作用的是 #info div 更新。 div 第一次更新,然后再次更新仅显示“所有文件已上传”。因此,用户不会收到有关上传过程的反馈。 我不明白为什么......有什么帮助吗?

I'm trying to write a jQuery function to let users upload many files at once. Here's the function I thought to give the user some feedback about the upload process progress.

function uploadFiles(numbersOfFiles, start) {
   $("#info").html(start + " files uploaded");
   $.post('upload.php', {
      start: start
   }, function (data) {
      start += 5;
      if (start < numbersOfFiles) {
         uploadFiles(numbersOfFiles, start);
      } else {
         $("#info").html("All files have been uploaded");
      }
   });
}

The function calls a php script to upload 5 files, then if there are more files to upload it calls the script again. The whole process works. I've tried it with 100 files. The only thing that doesn't work is the #info div updating. The div get updated the first time and then again only to show "All files have been uploaded". So there's no feedback for the user about the uploading process.
I can't understand why... Any help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疧_╮線 2024-09-05 07:53:13

$.post 是异步执行的。这意味着 jQuery 在执行另一个 $.post 之前不会等待 POST 完成,

因此 jQuery 将非常快速地执行所有 POST,并且您所看到的只是“所有文件已上传”消息,即使实际的 POST 仍在后台等待响应。

要执行您想做的操作,请在 complete: 中递归调用 uploadFiles

$.post is executed asynchronously. Meaning jQuery does not wait for the POST to finish before executing another $.post

Hence jQuery will very quickly execute all the POSTs and all you got to see is "All files have been uploaded" message, even though the actual POST is still waiting for responds in the background.

To do what you want to do, recursively call uploadFiles in complete:.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文