如何使用AJAX替换json_encode返回结果的内部html


How to replace inner html using returned results from json_encode with AJAX?

为了更清楚,这里是我的小提琴示范。

我有多个DIV,它们有一个唯一的ID,比如:desk_85(你看到的小方框和数字都变了)。

<div class="desk_box_ver id="desk_85" data-rel="85" style="left:20px;top:1165px;">B20</div>

我想要show_aht.php中的"aht_value"来替换每个适当的"desk_#"DIV.中的数字

我的json_encode结果示例:

[{"username":"HCZR","aht_value":"578","station":"B12"{"username":"FEHER4","aht_value":"703","station":"B20"}]

我想要解决的问题:

我将在这个例子中使用上面的DIV和VALUES。。。

1.将数组中的站号与桌面上的站号相匹配_#DIV,换句话说,将json结果中的"B20"与DIV中的"B20"进行比较。

  1. 如果匹配,则将desk_85中的内部html替换为数组中的"aht_value"(因此显示278而不是B20)

如果我需要澄清,请告诉我。提前感谢!

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:"GET",
                    url : "show_aht.php",
                    data:{  } , // do I need to pass data if im GET ting?
                    dataType: 'json',
                    success : function(data){
                        console.log(data);
                        /*for(i = 0; i < data.length; i++){
                            $("#test_"+i).html(data[i]);    
                        }//end for  
                        */
                      }//end success
                });//end ajax
              });//end click
            });//end rdy
        </script>

show_aht.php-json_encode部件

    foreach ($memo as $username => $memodata) {
    if (in_array($username, array_keys($user))) {
    // Match username against the keys of $user (the usernames) 
    $userdata = $user[$username];
    if (is_null($memodata['aht_value'])) {
        $result[] = array( 'username'  => $userdata['username'],
                                             'aht_value' => 'NA',
                                             'station'  => $userdata['station']
                                            );
    } 
    else {
        $result[] = array( 'username'  => $userdata['username'],
                                             'aht_value' => substr($memodata['aht_value'],0,-3),
                                             'station'   => $userdata['station']
                                            );
    }
    }
    }
    echo json_encode($result);

以下是我如何理解这个过程:

  1. 查找类为"desk_box_ver"的所有div
  2. 循环返回的对象列表,如{"username":"HCZR"、"aht_value":"578"answers"station":"B12"}
  3. 对于每个返回的对象,从1开始在div上循环。并查看div有一个与对象的station属性匹配的内部HTML
  4. 如果是,请将内部HTML替换为对象的aht_value属性

这里似乎并没有实际使用desk_#ID,对吗?

Javascript代码类似于:

success : function(data){
    console.log(data);
    var allDivs = $('.desk_box_ver');  // 1.
    for(var i = 0; i < data.length; i++) { // 2.
        for (var j = 0; j < allDivs.length; j++) {
            if (allDivs[j].innerHTML === data[i]['station']) { // 3.
                allDivs[j].innerHTML = data[i]['aht_value'];   // 4.
            }
        }
    }
} // end success

这不是一种非常好的组织代码的方法(嵌套循环通常很糟糕,尽管较小的大小可能无关紧要),但它应该能满足您的需要。

使用像desk_B20这样的ID,您可以执行以下操作:

success : function(data){
    console.log(data);
    for(var i = 0; i < data.length; i++) { // loop over results
        var divForResult = $('#desk_' + data[i]['station']); // look for div for this object
        if (divForResult.length) { // if a div was found
            divForResult.html(data[i]['aht_value']); // set inner HTML
        }
    }
} // end success