【问题标题】:PHP and AJAX: How can I display json_encode data in PHP while loop?PHP 和 AJAX:如何在 PHP while 循环中显示 json_encode 数据?
【发布时间】: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>";
            }
        }
    }

【问题讨论】:

    标签: javascript php jquery ajax mysqli


    【解决方案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 循环中的每个值多次保存到数组中,而不是保存一次?
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2018-12-25
    相关资源
    最近更新 更多