PHP foreach循环中的Ajax POST

时间:2013-01-01 12:38:56

标签: php ajax loops foreach .post

我使用$ .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重叠另一个:( 有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:0)

    您的样本中
  1. $id始终为零。
  2. 您需要制作单独的函数show_graph'.$i.'()(说实话,您根本不需要函数,将$.post放在表后面)

  3. 编辑:您的脚本应如下所示:

    <?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>';
    

答案 1 :(得分:0)

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

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

  1. 公司名称
  2. 结果div ID

答案 2 :(得分: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>');
                });
   });
});