【问题标题】:How can I use Ajax to delay a PHP for loop and echo out PHP on screen?如何使用 Ajax 延迟 PHP for 循环并在屏幕上回显 PHP?
【发布时间】:2014-12-23 05:58:15
【问题描述】:

我不确定 Ajax 是否是我需要的,因为我不知道从哪里开始,但我会描述一下我希望发生的事情。

我有一个 PHP 文件(我们称之为 scan.php),其中包含一个沿数组迭代的 For 循环,该数组包含存储在 PHP 目录中的本地文件的详细信息。对于数组中的每个项目(文件的路径),我希望它(可能是一个 ajax 脚本?)调用另一个 php 文件(让我们称之为 info.php)并在屏幕上显示 PHP 文件输出的任何内容,以及信息.php 将数组索引中的文件路径作为参数。

在 info.php 文件中有各种(动态生成的)div,它们根据用户单击的 div 将不同的值插入到数据库中。当该用户单击 div 时,它会向数据库中插入一个值(通过我已经开始工作的 ajax 调用),然后显示一条消息(我正在使用 javascript window.alert)。如果该消息成功,则 info.php 函数结束,我们返回 scan.php。无论 info.php 回显什么都被清除,然后循环再次迭代。

抱歉,这有点复杂,但我不知道从哪里开始。任何人都可以给我任何关于如何开始的提示吗?我看过 ajax,但坦率地说,我不知道从哪里开始,甚至不知道是否可以使用 ajax 来延迟 PHP for 循环。

这是我认为会显示 info.php 的脚本,但它没有将任何内容回显到“显示”div 中 - 或者根本没有:

    function Search_file(path) {
    $( "#show" ).empty();
    var request = $.ajax({
        url: "info.php?path="+path,
        type: "GET",            
        dataType: "html"
    });
    $("#show").html(result); 
    request.done(function(data) {
        alert("Next file");
    });
}

【问题讨论】:

    标签: php jquery ajax sqlite


    【解决方案1】:

    AJAX 是异步的,因此您在设置 html 时还没有收到结果。您需要像这样在 done 处理程序中移动“显示”代码:

    function Search_file(path) {
        $("#show").empty();
        var request = $.ajax({
            url: "info.php?path="+path,
            type: "GET",            
            dataType: "html"
        });
    
        request.done(function(data) {
            $("#show").append(result); 
            alert("Next file");
        });
    }
    

    【讨论】:

    • 好的,谢谢,但是我如何让它等到我在 info.php 的输出中完成了我需要做的任何事情,然后退出该函数并进入 for 循环的下一次迭代?这是我在 scan.php 中的 php for 循环: foreach (preg_grep('/^([^.])/',scandir(realpath($row["movies_dir"]))) as $key => $value) { echo ""; }
    • 嗨,不幸的是,在将该行移动到您说它应该去的地方之后,它仍然没有输出任何东西。
    • 我认为这是我的 PHP 代码错误,因为 php for 循环中的代码甚至没有加载简单的 window.alert 测试。
    • 你找到你的循环了吗?我更新了我的示例以附加到结果中,而不是每次都清除和替换。这样您就不必等待循环的每次迭代,它只是在响应准备好时附加响应。这确实是 AJAX 调用的全部意义所在。此外,如果您认为 PHP 与问题相关,您应该编辑您的问题,而不是在 cmets 中添加代码。
    • 我已经让它显示 OK,但现在我无法让循​​环(现在每个循环都是一个 jquery)在移动到下一个索引之前等待用户输入。查看我创建的这个新问题:stackoverflow.com/questions/26614646/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多