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

时间:2014-11-12 19:49:38

标签: javascript php jquery ajax json

更清楚here is my fiddle for demonstration

我有多个具有唯一ID的DIV,如: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.使用来自desk_#DIV的站号从阵列中搜索站号,换句话说,将json结果中的“B20”与DIV中的“B20”进行比较。

  1. 如果它们匹配,则将desk_85中的内部html替换为数组中的“aht_value”(因此显示278而不是B20)
  2. 如果我需要澄清一下,请告诉我。 提前谢谢!

    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 part

        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 个答案:

答案 0 :(得分:1)

以下是我对该过程的理解:

  1. 查找所有包含课程的div&#34; desk_box_ver&#34;
  2. 循环返回返回的对象列表,例如{&#34;用户名&#34;:&#34; HCZR&#34;,&#34; aht_value&#34;:&#34; 578&#34;,&# 34;台&#34;:&#34; B12&#34;}
  3. 对于每个返回的对象,循环遍历来自1.的div,并看到div具有与对象的站属性匹配的内部HTML
  4. 如果是,请用对象的aht_value属性替换内部HTML。
  5. 桌面#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
    

    这不是组织代码的一种超级好方法(嵌套for循环通常很糟糕,虽然较小的尺寸可能并不重要),但它应该做你需要的。

    使用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