PHP 和 AJAX:如何在 PHP while 循环中显示 json_encode 数据?

Posted

技术标签:

【中文标题】PHP 和 AJAX:如何在 PHP while 循环中显示 json_encode 数据?【英文标题】:PHP and AJAX: How can I display json_encode data in PHP while loop? 【发布时间】:2015-01-06 22:48:21 【问题描述】:

我对使用 AJAX 和使用 json_encode 传递数据非常陌生。我有这个“aht”按钮,点击它会向我的 show_aht.php 脚本发送一个 AJAX 请求,该脚本将运行一个查询。我想保存结果并将其显示到我的 map.php 中。

问题:

在我的 map.php 中,我有一个 while 循环,当单击显示其中的内容时,它会输出方形(桌面)DIV 和另一个 DIV(站)。 Here is the fiddle so you may understand。我希望 show_aht.php "TIME" 的结果显示在我的 WHILE LOOP 在 map.php 中生成的 DIV 中。

怎么可能做到这一点?我知道 AJAX 和 PHP 不能相互交互,这就是我需要帮助的原因。如果这不能完成,我还能如何在每个输出的 DIV 上显示从 show_aht.php 到其相应用户名的时间?我展示了大约 200 个。

提前致谢。

ma​​p.php(只显示while循环的最后一行,输出所有DIV)

//desk DIV
 while(somequery)
    ....
    echo '<div class="' . $class . '" data-rel="' . $id . '" style="left:' . $x_pos . 'px;top:' . $y_pos.'px;">' . $sta_num . '</div>' . "\n";
//end while

//station DIV
while(some query)
.....
   echo '<div class="station_info_" id="station_info_' . $id . '" style="left:' . $x_pos . 'px;top:'                             .$y_pos . 'px;"><p class="numb">User:' . $user .'<br>Station:' . $hostname . '<br>Pod:' . $sta_num .     '<br>Section:' . $sec_name . '<br>State:' . $state .'<br></p></div>' . "\n";
//end while

map.php(AJAX 部分)

<div id="aht"><!--aht button--> 
    <button id="aht_button">AHT</button>    
</div><!--aht button-->

<script type="text/javascript">
            $(document).ready(function() 
                $('#aht').click(function()
                    $.ajax(
                    type:"POST",
                    url : "show_aht.php",
                    data: , // pass data here
                    dataType: 'json',
                    success : function(data)

                    //end success
                );//end ajax
              );//end click
            );//end rdy
        </script>

show_aht.php(显示循环和我希望返回数据的第一部分)

foreach($memo_data as $v)
        foreach($user_data as $m)
            if($v['memo_code'] == $m)
                echo " User: " .$m. " Time: " . $v['avg_handle_time'] . "<br>";
            
            elseif( $v['memo_code'] != $m)
                echo  "User: " . $m . " Time: N/A <br>";
            
        
    

【问题讨论】:

【参考方案1】:

除了一个有效的 json 字符串,不要输出任何东西。在您的情况下,您可以通过将 echo 替换为构建数组(或对象...)并在最后输出:

例如:

$data = array();
foreach($memo_data as $v)
        foreach($user_data as $m)
            if($v['memo_code'] == $m)
                $data[] = " User: " .$m. " Time: " . $v['avg_handle_time'] . "<br>";
            
            elseif( $v['memo_code'] != $m)
                $data[] = "User: " . $m . " Time: N/A <br>";
            
        
    

// Output your json string
echo json_encode($data);

请注意,我只是用赋值替换了您的回声,但您也可以在数组中添加数组以仅返回数据部分并随后在 javascript 中处理。

例如(这将取决于您的确切数据结构...):

...
$data[] = array($m, $v['avg_handle_time']);
...

【讨论】:

感谢您的回复,这是我使用 var_dump($data) 时您的回答结果。它将 FOR 循环中的每个值多次保存到数组中,而不是保存一次? @alda1234 您正在使用嵌套循环,因此这可能是问题所在。如果不查看您正在使用的数据,很难判断。 好的,问题出在我的 for 循环中,我必须更改 IF 语句中的条件。现在数组已“正确”完成,我如何使用 AJAX 将其发送回,以便可以在不同的 DIV 上显示它?谢谢 @alda1234 它已经在那里了,你只需要在客户端/在 javascript 中解析 json 以将不同的部分放在你想要的地方。 抱歉,我不理解对客户端的解析?如果在执行 show_aht.php 之前使用 PHP WHILE 循环方式生成数据,如何将数据发送到我的 DIV 中。谢谢【参考方案2】:

将 show_aht.php 更改为

$res=array();
foreach($memo_data as $v)
        foreach($user_data as $m)
            if($v['memo_code'] == $m)
                $res[]= " User: " .$m. " Time: " . $v['avg_handle_time'];
            
            elseif( $v['memo_code'] != $m)
                $res[]=  "User: " . $m . " Time: N/A <br>";
            
        
    

echo json_encode($res);

和map.php ajax 到

$(document).ready(function() 
                $('#aht').click(function()
                    $.ajax(
                    type:"POST",
                    url : "show_aht.php",
                    data: , // pass data here
                    dataType: 'json',
                    success : function(data)
                      for(i=0;i<data.length;i++)
                      //append data[i] to div
                      
                    //end success
                );//end ajax
              );//end click
            );//end rdy

【讨论】:

感谢您的回复,这是我使用 var_dump($data) 时您的回答结果。它将 FOR 循环中的每个值多次保存到数组中,而不是保存一次?

以上是关于PHP 和 AJAX:如何在 PHP while 循环中显示 json_encode 数据?的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 仅适用于第一次从 php 中的 while 循环中获取数据

PHP / MySQL / AJAX - 更新多个数据

PHP:具有不同名称的多个按钮以使用 AJAX 更新 MySQL 数据库

如何使用子域和 AJAX 使 PHP 会话工作?

php问题 confirm在ajax中如何使用?

改进 PHP 数组以在 AJAX 上使用