非同期でテーブルが正しくレンダリングされない| PHP | API | LARAVEL

ルーカスLn

私はこの非同期コードを持っていますが、テーブル内でレンダリングしようとすると、テーブルは混乱(画像)になりますが、ページの更新後、テーブルは完全に正常であり、理由がわかりません、どうすればこの問題を修正できますか?

そして、より良い非同期コードを使用できる場合は、非同期にする必要$api->getMatchTimeline($match->gameId);があることはわかっていますが、どうすればよいかわかりません。

   

   <table class="table table table-bordered" style="width:100%">
    <tr>
     <thead>
       <th>Items</th>
      </thead>
    </tr>
  
<tbody>

  <?php
$onSuccess = function (Objects\MatchDto $match) use (&$api, $champ) {
    echo "<tr>";
    echo "<td>";
    foreach ($match->participants as $partId) {
        if ($partId->championId == $champ) {
            $participant_id = $partId->stats->participantId;
            $pp = $api->getMatchTimeline($match->gameId);
            foreach ($pp->frames as $p) {
                foreach ($p->events as $t) {
                    if ($t->type == "ITEM_PURCHASED" and $t->participantId == $participant_id) {
                        $item_id = $t->itemId;
                        $d = $api->getStaticItem($item_id);
                        $depth = $d->depth;
                        if (($depth == 3 or $depth == 2)) {
                            echo "<a href = https://lolprofile.net/match/kr/$match->gameId#Match%20History >";
                            echo "<img src =" . DataDragonAPI::getItemIconUrl($item_id) . " />" . '</a>';
                        }
                    }
                }
            }
        }
    }
    echo "</td>";
    echo "</tr>";
};
$onFailure = function ($ex) {
    echo $ex;
};
foreach ($database as $game) {
    $api->nextAsync($onSuccess);
    $match = $api->getMatch($game->match_ids);
}
$api->commitAsync();
?>

     </tbody>
     </table>
   
   

ここに画像の説明を入力してください

テーブルの外にレンダリング

ここに画像の説明を入力してください

Dai

問題は「非同期」PHPコードに関係しているのではなく、<table>マークアップが正しくないためです。

HTMLの<table>要素には2つの異なる形式があります。1つ目は、「次の<tbody>ような暗黙の形式です。

<table>
    <tr>
        <td>col 1</td>
        <td>col 2</td>
        <td>col 3</td>
    </tr>
</table>

The other has an explicit <tbody> element, which can also optionally have a <thead> and <tfoot> (you can also have multiple <tbody> but only a single <thead>. You can use a <thead> and <tfoot> with an implicit <tbody> but this is not recommended - I recommend everyone use the explicit syntax, like so:

<table>
    <tbody>
        <tr>
            <td>col 1</td>
            <td>col 2</td>
            <td>col 3</td>
        </tr>
    </tbody>
</table>

Note that the actual DOM representation of both tables is the same: in the DOM a <table> never has <tr> as immediate children.


Secondarily, you can also make your code a LOT easier to read and follow if you separate your application logic from your rendering logic by doing all of your API calls and whatnot at the start of your PHP script and populate a "view model" object and then the rendering logic is greatly simplfied, like so:

<?php
// This PHP block should be before *any* HTML is written:

class MatchAndItems {
    public Objects\MatchDto $match;
    public Array $items;
}

$allMatches = Array(); # Array of `MatchAndItems`.

$onFailure = function ($ex) {
    echo $ex;
};

$gotMatch = function (Objects\MatchDto $match) use (&$api, $champ, $allMatches) {
    
    $e = new MatchAndItems();
    $e->match = $match;
    $e->items = array();

    foreach ($match->participants as $partId) {
        if ($partId->championId == $champ) {
            $participant_id = $partId->stats->participantId;
            $pp = $api->getMatchTimeline($match->gameId);
            foreach ($pp->frames as $p) {
                foreach ($p->events as $t) {
                    if ($t->type == "ITEM_PURCHASED" and $t->participantId == $participant_id) {
                        $item_id = $t->itemId;
                        $d       = $api->getStaticItem($item_id);

                        array_push( $e->items, $d );
                    }
                }
            }
        }
    }

    array_push( $allMatches, $e );
};

# Set-up web-service HTTP request batches:
foreach( $database as $game ) {
    $api->nextAsync( $gotMatch )->getMatch( $game->match_ids );
}

# Invoke the batch:
$api->commitAsync();

# The below code uses https://www.php.net/manual/en/control-structures.alternative-syntax.php

?>

<!-- etc -->


<table class="table table table-bordered" style="width: 100%">
    <thead>
        <tr>
            <th>Items</th>
        </tr>
    </thead>
    <tbody>
<?php    foreach( $allMatches as $match ): ?>
        <tr>
            <td>
<?php
            foreach( $match->items as $item ):

                if( $item->depth == 2 or $item->depth == 3 ):
                     echo "<a href = https://lolprofile.net/match/kr/$match->gameId#Match%20History >";
                     echo "<img src =" . DataDragonAPI::getItemIconUrl($item_id) . " />" . '</a>';
                endif;

            endforeach;
?>
            </td>
        </tr>
<?php endforeach;?>
    </tbody>
</table>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Laravelビューが正しくレンダリングされない

分類Dev

APIリクエストのLaravelオプションパラメータが正しく認識されない

分類Dev

Laravelブレードテンプレートがテーブルを正しくレンダリングしない

分類Dev

Laravel 5 / Codeceptionが正しくルーティングされない

分類Dev

PHP-Yii2MPDFがテーブルをレンダリングしない

分類Dev

Laravelブレードテンプレートがレンダリングされない

分類Dev

laravel5.1-ブレードテンプレートがレンダリングされない

分類Dev

php artisan migrateがlaravel 7でテーブルを作成しない

分類Dev

Laravelルーティングが正しく機能しない

分類Dev

AWS Iamコマンド、ターミナルで正しく機能し、Laravel / PHP AWSSDKで機能しない

分類Dev

Laravel Vue —ルータービューがレンダリングされない

分類Dev

Handler.phpのレンダリング関数が機能しないLaravel8

分類Dev

Laravel / PHP:レンダリングされたフィールドを検証する方法は?

分類Dev

FullcalendarがLaravelでレンダリングされない

分類Dev

PHPファイルはLaravelプロジェクトで処理されるのではなく、ブラウザでダウンロードされます

分類Dev

PHPテーブルの値が正しく表示されない

分類Dev

Laravel 5.4 で laravel パンくずが html をレンダリングしない

分類Dev

PHP&Fetch APIを使用してDOMで動的にレンダリングされるJavaScriptを使用してアンカータグを選択します

分類Dev

Laravelでレンダリングされない角度ビュー

分類Dev

Laravel5.5はPHP7.4でメールをレンダリングしません

分類Dev

Laravel:api.phpによってルーティングことができます私はAPIコントローラーにカスタムメソッドを追加しますか?

分類Dev

api.php Laravel + Jetstream + Inertia.jsでapiResourceを保護する

分類Dev

Laravel API認証(パスポート); CryptKey.phpのErrorException

分類Dev

PHPヘッダー()が正しくリダイレクトされない

分類Dev

ページが正しくリダイレクトされないLaravel5.6

分類Dev

ページが正しくリダイレクトされない-Laravel7

分類Dev

Laravel4-職人コンソールとレンダリングされたページでPHPタグのプレフィックスが付けられます

分類Dev

PHP POSTが正しくリダイレクトされない

分類Dev

Microsoft Graph Api OAuthが302ではなくステータスコード200を返す(ログインページにリダイレクトされない)

Related 関連記事

  1. 1

    Laravelビューが正しくレンダリングされない

  2. 2

    APIリクエストのLaravelオプションパラメータが正しく認識されない

  3. 3

    Laravelブレードテンプレートがテーブルを正しくレンダリングしない

  4. 4

    Laravel 5 / Codeceptionが正しくルーティングされない

  5. 5

    PHP-Yii2MPDFがテーブルをレンダリングしない

  6. 6

    Laravelブレードテンプレートがレンダリングされない

  7. 7

    laravel5.1-ブレードテンプレートがレンダリングされない

  8. 8

    php artisan migrateがlaravel 7でテーブルを作成しない

  9. 9

    Laravelルーティングが正しく機能しない

  10. 10

    AWS Iamコマンド、ターミナルで正しく機能し、Laravel / PHP AWSSDKで機能しない

  11. 11

    Laravel Vue —ルータービューがレンダリングされない

  12. 12

    Handler.phpのレンダリング関数が機能しないLaravel8

  13. 13

    Laravel / PHP:レンダリングされたフィールドを検証する方法は?

  14. 14

    FullcalendarがLaravelでレンダリングされない

  15. 15

    PHPファイルはLaravelプロジェクトで処理されるのではなく、ブラウザでダウンロードされます

  16. 16

    PHPテーブルの値が正しく表示されない

  17. 17

    Laravel 5.4 で laravel パンくずが html をレンダリングしない

  18. 18

    PHP&Fetch APIを使用してDOMで動的にレンダリングされるJavaScriptを使用してアンカータグを選択します

  19. 19

    Laravelでレンダリングされない角度ビュー

  20. 20

    Laravel5.5はPHP7.4でメールをレンダリングしません

  21. 21

    Laravel:api.phpによってルーティングことができます私はAPIコントローラーにカスタムメソッドを追加しますか?

  22. 22

    api.php Laravel + Jetstream + Inertia.jsでapiResourceを保護する

  23. 23

    Laravel API認証(パスポート); CryptKey.phpのErrorException

  24. 24

    PHPヘッダー()が正しくリダイレクトされない

  25. 25

    ページが正しくリダイレクトされないLaravel5.6

  26. 26

    ページが正しくリダイレクトされない-Laravel7

  27. 27

    Laravel4-職人コンソールとレンダリングされたページでPHPタグのプレフィックスが付けられます

  28. 28

    PHP POSTが正しくリダイレクトされない

  29. 29

    Microsoft Graph Api OAuthが302ではなくステータスコード200を返す(ログインページにリダイレクトされない)

ホットタグ

アーカイブ