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 个。
提前致谢。
map.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 循环中获取数据