1

$.post を使用して、php foreach ループ内で変数、会社名などのデータをコントローラー メソッドに投稿しています。コントローラーでは、渡されたデータを使用してプロットされた棒グラフをエコー バックします。foreach ループ内で、特定の '' 要素に渡される ID を動的に生成しています。その div 内に返されたこの棒グラフをプロットする必要があります。私が現在使用しているコードは以下に掲載されています。

    <?php
        $id=0;
        foreach($customer_companies as $data) {
            $company_name=$data->CompanyName;
            echo '<tr>
                  <script>function show_graph()
            {
                $.post("'.$base.'reports/single_bargraph/'.$company_name.'",      {},function(result){
                       $("#'.$id.'").html(result);
                });
             }                                  
        </script> 
        <td class="tablecntntgry" id="'.$id.'" height="45"> 
            <script type="text/javascript"> show_graph();   </script>                            
        </td>
      </tr>';
?>

データ $customer_companies を取得するためのページネーションを実装しており、一度に 3 つのページが表示されているとします。今私が直面している問題は、グラフが指定されたIDでプロットされていないことです.:(時には、生成された正しい3つのtdでプロットされますが、時には2/3が他のものと重なる同じtdでプロットされます:(これで私を助けますか?

4

3 に答える 3

0

あなたは本当にここであなたのアプローチを再考する必要があります、あなたはjavascriptの柔軟性を乱用しています。関数を複数回定義しているshowGraph()ので、JavaScriptがトリガーするメソッドのバージョンはどれですか?おそらく最初。jsをphpから分離します。

<?php
        $id=0;
        foreach($customer_companies as $data) {
            $company_name=$data->CompanyName;
            echo '<tr id="'.$data['CompanyName'].'" class="companies"></tr>';
?>

$(function(){
   $('.companies').each(function(){
      $.post("'.$base.'reports/single_bargraph/'.$company_name.'",      {},function(result){
                       $(this).append('<td class="tablecntntgry">'+result+'</td>');
                });
   });
});
于 2013-01-01T13:06:05.623 に答える
0

通常、AJAX リクエストは応答を得るのに時間がかかります。しかし、応答がクライアント マシンに到着するまでに、関数は上書きされています。

PHP の foreach ループの前に script タグを配置し、2 つのパラメーターを受け入れるように関数を変更することをお勧めします。

  1. 会社名
  2. 結果の div ID
于 2013-01-01T12:56:53.023 に答える
0
  1. $idサンプルでは常にゼロです。
  2. 個別の関数を作成する必要がありますshow_graph'.$i.'()(正直に言うと、関数はまったく必要ありません。$.postテーブルの後に入れてください)

編集:スクリプトは次のようになります。

<?php

echo "<table>";
foreach ($customer_companies as $id => $data) {    
    echo '<tr><td class="tablecntntgry" id="row' . $id . '" height="45"></td></tr>';
}
echo "</table>";

// NOTE i open <script> tag after </table> closing tag

echo '<script>';
foreach ($customer_companies as $id => $data) {
    $company_name = $data->CompanyName;
    echo '
    $.post("' . $base . 'reports/single_bargraph/' . $company_name . '", {},function(result){
        $("#row' . $id . '").html(result);
    });                                  
    ';
}
echo '</script>';
于 2013-01-01T12:43:41.883 に答える