我很擅长使用AJAX并使用json_encode传递数据。单击时我有这个“啊”按钮,它会向我的show_aht.php脚本发送一个AJAX请求,该脚本将运行一个查询。我想保存结果并将其显示在我的map.php中。
问题:
在我的map.php中,我有一个while循环,在单击时显示方形(桌面)DIV与另一个DIV(工作站),显示其中的内容。 Here is the fiddle so you may understand。我希望show_aht.php“TIME”的结果显示在map.php中我的WHILE LOOP生成的DIV中。
怎么可能这样做?我知道AJAX和PHP无法互相交互,这就是我需要帮助的原因。如果无法做到这一点,我还能如何在show_aht.php中显示TIME到输出的每个DIV上的相应用户名?我显示了大约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>";
}
}
}
答案 0 :(得分:3)
除了一个有效的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']);
...
答案 1 :(得分:1)
将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