我有此代码:
<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>
答案 0 :(得分:0)
请注意,PHP是服务器端,而JS(您编写的代码)是客户端。
这意味着PHP首先工作(在将请求发送到服务器之后),然后将数据向下发送到客户端,由JS接管。
没有办法改变它。如果您想让PHP做某事,则必须发送一个请求-等待服务器的响应。您不能仅通过发送新请求并等待新响应来从前端控制PHP进程。
因此,当HTML出现在浏览器中时,已经完成了PHP循环功能(您在文本编辑器中编写的功能)。前端请求的任何数据都无法更改已经完成的PHP循环。
但是至少有两种方法可以使代码工作:
代替PHP,创建JS字符串“模板”并以此循环,因此在客户端创建最终的HTML字符串。
使用cURL(或任何其他工具)在服务器端查询API,使用PHP创建HTML,然后将其发送给客户端。