有一种方法可以将异步数组转换为同步,以便在php代码中使用?

时间:2019-06-22 18:16:33

标签: javascript php arrays asynchronous undefined

我有此代码:

<script>
        var avatar = [];
        var names = [];
        var star = []
        var forks = [];

        async function pegaRepositorio(){
            const url = "https://api.github.com/search/repositories?q=language:Java&sort=stars&page=1"
            const response = await fetch(url)
            const resultado = await response.json()

            resultado.items.forEach(i=>{
            avatar.push(i.owner.avatar_url);
            names.push(i.name);
            star.push(i.stargazers_count);
            forks.push(i.forks_count);
        })
    }
    </script>

我想将这4个数组用于php代码,但是当我在异步功能之外进行打印时,它们返回undefined(显示为Undefined(因为浏览器不等待http响应,因此打印undefined,当我在控制台中查看时)有一个答复,但已经打印了(我知道这听起来有些混乱)。有一种方法可以在此php / html代码中使用吗?我只想在此for循环中使用他们的数据:

Php / HTML代码:

<div class="container-fluid bg-claro">
        <?php

        for($i=0;$i<30;$i++)
        {
            ?>

        <div class="container mt-15">
            <div class="row repo">
                <div class="col-3">
                    <img src="<?php echo "<script>document.writeln(avatar[$i]);</script>";?>" id="logo" class="circulo img-fluid" alt="">
                </div>
                <div class="col-7" style="padding-left: 0;">
                    <p class="titulorepo"><?php echo "<script>document.writeln(names[$i]);</script>";?></p>
                </div>
                <div class="col-2 colstars">
                    <div class="star">
                        <i class="fas fa-star"></i>
                        <p class="numbers"><?php echo "<script>document.writeln(star[$i]);</script>";?></p>
                    </div>
                    <div class="fork">
                        <i class="fas fa-code-branch" style="margin-left: 4px;"></i>
                        <p class="numbers"><?php echo "<script>document.writeln(forks[$i]);</script>";?></p>
                    </div>
                </div>
            </div>

        </div>
        <?php 
        }
        ?>
    </div>

1 个答案:

答案 0 :(得分:0)

请注意,PHP是服务器端,而JS(您编写的代码)是客户端。

这意味着PHP首先工作(在将请求发送到服务器之后),然后将数据向下发送到客户端,由JS接管。

没有办法改变它。如果您想让PHP做某事,则必须发送一个请求-等待服务器的响应。您不能仅通过发送新请求并等待新响应来从前端控制PHP进程。

因此,当HTML出现在浏览器中时,已经完成了PHP循环功能(您在文本编辑器中编写的功能)。前端请求的任何数据都无法更改已经完成的PHP循环。

但是至少有两种方法可以使代码工作:

  1. 代替PHP,创建JS字符串“模板”并以此循环,因此在客户端创建最终的HTML字符串。

  2. 使用cURL(或任何其他工具)在服务器端查询API,使用PHP创建HTML,然后将其发送给客户端。