1

我正在使用 $.post 在 php foreach 循环内发布一些数据,例如变量、公司名称到控制器方法。在控制器中,我回显了一个使用传递的数据绘制的条形图。现在在 foreach 循环中,我动态生成了一个 id,该 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
  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 回答
0

通常 AJAX 请求需要时间才能得到响应。但是当响应到达客户端机器时,您已经覆盖了该功能!

我建议您将脚本标记放在 PHP foreach 循环之前的某个位置,并更改函数以接受两个参数。

  1. 公司名称
  2. 结果 div ID
于 2013-01-01T12:56:53.023 回答
0

您真的需要在这里重新考虑您的方法,您正在滥用 javascript 的灵活性。您正在showGraph()多次定义该函数,那么您希望 javascript 触发哪个版本的方法?应该是第一个吧。将您的 js 与您的 php.ini 分开。

<?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 回答