【问题标题】:How can I use Jquery to get PHP data step by step?如何使用 Jquery 逐步获取 PHP 数据?
【发布时间】:2012-08-20 20:37:46
【问题描述】:

我在使用 php 组合的 jquery 时遇到了一点问题。让我从代码开始。

PHP 代码:

if ($_POST["request"]==10)
    progress();

function progress()
{
    $files = getfiles();
    $progress = 0;
    $progressRate = 100/$files->number;
    for ($i=0;$i<$files->number;$i++)
    {
        sendfile($files->location[$i]);
        $progress+=$progressRate;
        echo $progress;
    }
}

代码输出: 例如 files->number = 2 那么输出将是 50 100。

Jquery 代码:

jQuery.post("functions.php",{request:10},function(data){

            alert(data);


   });

问题:我想要的是先警报50,然后警报100,我的意思是当第一个循环以php结束并回显第一个进度值时,jquery应该能够拦截它,但是jquery会在整个循环完成后提醒数据,这意味着我在一个警报中得到50100,jQuery有什么办法可以处理这个吗?我知道还有其他解决方案使用 PHP 并生成例如隐藏 div 或属性中的循环数,然后在 jQuery 中使用循环,但我真的很想直接这样做。

【问题讨论】:

  • @PeeHaa 右括号放错了位置,但 OP 说它正在工作,所以我们应该相信他的话。问题是他试图将单个响应作为多个响应访问,这是行不通的。
  • @PeeHaa 什么是无效的 php?该代码位在任何 php 服务器上都完全有效
  • 我刚才写的代码,因为不是我自己写的,为了让问题更简单,我把它简化了,这里重要的是jquery如何处理输出,而不是如何创建输出跨度>
  • @Pierre 所以你告诉我if ($_POST["request"])==10 不会在你住的地方产生语法错误?那将是......奇怪
  • Guyz 我修复了 if 语句,这不重要,重要的是输出,谢谢

标签: javascript php jquery multi-step


【解决方案1】:

这不是 AJAX 的工作方式。它发出一个请求并对响应执行“某些操作”,就像浏览器在导航到 URL 时所做的那样。

PHP 脚本将在服务器端执行,将结果打印到“屏幕”并作为响应发回。

如果要返回多个变量,应将它们作为 JSON 数据返回并在 javascript 中解析 JSON 字符串。

【讨论】:

  • 问题是这些值,会更新一个进度条,所以我需要在它生成的时候得到输出,而不是等待一切都完成,否则它不会有用
  • @FaouziNikolaic 那么你需要使用不同的方法。请求-响应模式不会为您执行此操作。
  • @FaouziNikolaic 在你问之前,不,我不知道如何做到这一点;我以前从来没有这样做过。但我确实知道您使用了错误的方法。
  • 感谢您的友好回答!让我们看看是否有人可以使用这种方法解决它,因为我知道我可以使用 php 技巧来解决它,但 jQuery 会更简单。
【解决方案2】:

jQuery(实际上是默认的 AJAX)只有在服务器完成请求后才返回响应。

因此,无法对 php 页面执行单个请求并获得多个响应。 一种方法是使用带有 upload progress 支持的 php,但我怀疑这实际上会对您的情况有所帮助,因为它仅用于上传文件。

【讨论】:

  • 是的,我正在将文件上传到谷歌驱动器,所以它不起作用,但感谢您的输入我不知道 PHP 中存在上传文件的上传进度。
  • 一种解决方法可能是对返回所有文件列表的页面执行 ajax 请求,在 javascript 中循环该列表并对每个文件执行 ajax 请求。如果你有很多文件可能会有点矫枉过正,但你可以在每次成功的 ajax 请求后更改进度条,或者你可以使用 Web 套接字,但可能需要大量额外的编码来完成此操作,并且不支持 Web 套接字由所有浏览器。我也遇到过很多需要这样做的情况,每次我不得不使用包含大量代码的解决方法或草拟这个想法并做其他事情。
  • 是的,谢谢 Pierre,这与我在帖子中谈到的相同替代方案,它涉及更多工作,但我想这是我唯一能做的,如果没有 ajax 请求可以处理这个问题。跨度>
猜你喜欢
  • 1970-01-01
  • 2013-09-10
  • 2012-08-31
  • 2021-04-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
相关资源
最近更新 更多