使用 Php Guzzle 的异步请求无法异步工作
Async requests with Php Guzzle are not working async
我创建了下面的代码来发出异步请求以从 API.
中获取数据
<?php
require 'vendor/autoload.php';
$url = "https://pucminas.instructure.com/api/v1/";
$client = new GuzzleHttp\Client(['base_uri' => $url]);
$headers = [
'Authorization' => "Bearer 11111~dsgffdhstggfjsdhf",
'Accept' => 'application/json',
];
$course_id = "2242";
set_time_limit(300);
$promise = $client->getAsync( 'courses/'.$course_id.'/students/submissions?student_ids[]=all&grouped=true&post_to_sis=false&enrollment_state=active&include[]=user&include[]=assignment&include[]=total_scores&per_page=1000', ['connect_timeout' => 600, 'headers' => $headers]);
$promise
->then(function ($response) {
echo 'Got a response! ' . $response->getStatusCode();
});
?>
<h2>Reports</h2>
我想当我加载页面时,它会在页面中显示文本 "Reports",并且在从 API 获取内容后(至少需要 60 秒),它会显示消息 "Got a response",但它不会那样工作。
首先,页面从 API 加载内容,然后才同时显示文本 "Reports" 和 "Got a message"。
我希望在加载页面时立即显示文本 "Reports",而仅当从 API.
加载数据时才显示文本 "Got a response"
我该怎么做?
您只能从 PHP 脚本发送单个响应,即您的浏览器请求一个页面,PHP 服务器构建该页面并将其发回。由于 HTTP 是无状态的,因此 PHP 服务器无法 'push' 将页面更新到您的浏览器。
要实现您想要的功能,您需要编写一些 javascript,它将调用 PHP 脚本来启动 guzzle 异步承诺。当承诺完成时,此承诺会将结果写入文件(或数据库)。
然后您需要第二个 javascript 函数来连续检查第二个 php 脚本。第二个 PHP 脚本将检查文件的内容(或数据库条目等)和 return 结果。
你最好看看 Axios 之类的东西,然后完全丢掉 PHP
我创建了下面的代码来发出异步请求以从 API.
中获取数据<?php
require 'vendor/autoload.php';
$url = "https://pucminas.instructure.com/api/v1/";
$client = new GuzzleHttp\Client(['base_uri' => $url]);
$headers = [
'Authorization' => "Bearer 11111~dsgffdhstggfjsdhf",
'Accept' => 'application/json',
];
$course_id = "2242";
set_time_limit(300);
$promise = $client->getAsync( 'courses/'.$course_id.'/students/submissions?student_ids[]=all&grouped=true&post_to_sis=false&enrollment_state=active&include[]=user&include[]=assignment&include[]=total_scores&per_page=1000', ['connect_timeout' => 600, 'headers' => $headers]);
$promise
->then(function ($response) {
echo 'Got a response! ' . $response->getStatusCode();
});
?>
<h2>Reports</h2>
我想当我加载页面时,它会在页面中显示文本 "Reports",并且在从 API 获取内容后(至少需要 60 秒),它会显示消息 "Got a response",但它不会那样工作。
首先,页面从 API 加载内容,然后才同时显示文本 "Reports" 和 "Got a message"。
我希望在加载页面时立即显示文本 "Reports",而仅当从 API.
加载数据时才显示文本 "Got a response"我该怎么做?
您只能从 PHP 脚本发送单个响应,即您的浏览器请求一个页面,PHP 服务器构建该页面并将其发回。由于 HTTP 是无状态的,因此 PHP 服务器无法 'push' 将页面更新到您的浏览器。
要实现您想要的功能,您需要编写一些 javascript,它将调用 PHP 脚本来启动 guzzle 异步承诺。当承诺完成时,此承诺会将结果写入文件(或数据库)。
然后您需要第二个 javascript 函数来连续检查第二个 php 脚本。第二个 PHP 脚本将检查文件的内容(或数据库条目等)和 return 结果。
你最好看看 Axios 之类的东西,然后完全丢掉 PHP