【问题标题】:How to display AJAX response value in column format individual?如何以列格式单独显示 AJAX 响应值?
【发布时间】:2017-08-30 20:25:13
【问题描述】:

我使用 AJAX 从 PHP 中仅获得 3 个用户值,并且我必须以列格式显示该值。我试过下面的代码,但它没有显示。 我得到的输出就像所有名字都垂直显示,然后在垂直显示姓氏之后。

AJAX

$(document).ready(function(){
        $('#search-button').click(function(){
            $.ajax( {
                type: 'POST',
                url: 'includes/process.php',
                data: $('#search-form').serialize(),
                dataType: 'json',
                success: function(response) {                     
                    for(data in response)
                    {
                    $('#response_profile_pic').append("<img src='images/profile/" + response[data].profile_pic + "' alt='' />");
                    $('#response_fName').append("<li>" + response[data].fName +"</li>");
                    $('#response_lName').append("<li>" + response[data].lName + "</li>"); 
                    }
                    $('#open_compare_popup').show();
                }
            });
        });
    });

PHP

    <div class="box-set"> 
        <ul class="point_compare">
            <span id="response_profile_pic"></span>
            <label>First Name</label><h2 id="response_fName"></h2>
            <label>Last Name</label><span id="response_lName"></span>
        </ul>
</div>

Process.php

$_SESSION['compare_user']=$_POST['compare_id'];//coming from html
$sql_compare='SELECT * FROM request WHERE Id IN (' .( is_array( $_SESSION['compare_user'] ) ? implode( ',', $_SESSION['compare_user'] ) : $_SESSION['compare_user'] ).')';
//echo $sql_compare;
//die();
$compare_records = array();
    $compare_query=$conn->query($sql_compare);
    if ($compare_query->num_rows > 0) {
    while($userdata12=$compare_query->fetch_assoc()){ 
        $compare_records[]=$userdata12;
        //echo $compare_pic;
    }
}
echo json_encode($compare_records);exit();

【问题讨论】:

  • 响应返回的是数组还是对象?它返回一个数组,是吗?您是否尝试访问在 response.data 中找到的数组?
  • 是的,它返回对象。我只想根据上传数组计数每次重复 div
  • 我的解决方案应该会有所帮助,但我不确定 response 的确切结构 - 如果您提供,我可以确认/修改我的代码以使其正常工作。

标签: jquery html ajax


【解决方案1】:

试试这个!

success: function(response) {
  $.each(response, function (i, item) {
    var fname= response[i]['fname'];
    var fname1= response['data'][0]['fname'];
    var fname2= response['data']['fname'];
    alert (fname);
    alert (fname1);
    alert (fname2);
  });
}

【讨论】:

  • 我必须重复我在代码中注释的 HTML div。请检查我的 HTML 代码
【解决方案2】:

编辑:根据您的 HTML,我会这样做。

success: function(response) {
    let repeatableDiv = "";

    response.data.forEach(val => {
    repeatableDiv += "<div class='box-set'> <span class='compare_userpic' id='response_profile_pic'><img src='images/profile/" + val.profile_pic + "' alt='' /></span>
    <ul class='point_compare'>
      <li>
        <h2>" + val.fName + "</h2>
      </li>
      <li>
        <h3>" + val.lName + "</h3>
      </li>
    </ul>
  </div>"      
  })

  $(".compare_result").innerHTML = repeatableDiv 

然后清除您注释掉的所有 HTML,它应该可以工作。

【讨论】:

  • 希望你检查我的 HTML 代码。我已经评论了这条线。我必须在那里显示所有输出。
  • 我必须在我注释的 HTML 代码中分别显示每条记录以获取信息。
  • 好的,我已经编辑了我的回复 - 试试这个,让我知道会发生什么。
  • 它没有采取任何行动。我的意思是没有输出
【解决方案3】:

它必须工作。这样做:

<div id="container"></div>

$(document).ready(function(){
        $('#search-button').click(function(){
            $.ajax( {
                type: 'POST',
                url: 'includes/process.php',
                data: $('#search-form').serialize(),
                dataType: 'json',
                success: function(response) {                     

                    var container = document.getElementById('container');

                    for (key in response){
                        var div=document.createElement('div');
                        var img=document.createElement('img');
                        var flab=document.createElement('label');
                        var llab=document.createElement('label');
                        var fcaption=document.createElement('h2');
                        var lcaption=document.createElement('h2');

                        img.setAttribute('src','images/profile/' + response[data].profile_pic);    
                        img.setAttribute('alt','');    
                        flab.innerText='First Name';    
                        llab.innerText='Last Name';    
                        fcaption.innerText=response[key].fName
                        lcaption.innerText=response[key].lName

                        div.appendChild(img);
                        div.appendChild(flab);
                        div.appendChild(fcaption);
                        div.appendChild(llab);
                        div.appendChild(lcaption);

                        container.appendChild(div);
                    }    
                }
            });
        });
    });

【讨论】:

  • 感谢 Mr.aimprogman 的回复,如果我必须为 CSS 添加相同的类或 ID,那么我该如何添加呢?
  • @Hybreeder with flab.setAttribute('class','label-style');或 flab.setAttribute('id','label-selector');
  • 还有其他方法可以解决这个问题吗?因为我有超过 8 列。怎么说?
  • 而且CSS也太大了
  • 我理解正确吗?您可以在 css 中执行此操作:#container > label { color: white}
【解决方案4】:

只需在回复中使用JSON.parse(); 即可解决此问题

$(document).ready(function(){
    $('#search-button').click(function(){
        $.ajax( {
            type: 'POST',
            url: 'includes/process.php',
            data: $('#search-form').serialize(),
            dataType: 'json',
            success: function(response) {                     
                response = JSON.parse(response);
                for(data in response) {
                    $('#response_profile_pic').append("<img src='images/profile/" + response[data].profile_pic + "' alt='' />");
                    $('#response_fName').append("<li>" + response[data].fName +"</li>");
                    $('#response_lName').append("<li>" + response[data].lName + "</li>"); 
                }
                $('#open_compare_popup').show();
            }
        });
    });
});

<div class="box-set"> 
    <ul class="point_compare">
        <span id="response_profile_pic"></span>
        <label>First Name</label><h2 id="response_fName"></h2>
        <label>Last Name</label><span id="response_lName"></span>
    </ul>
</div>

$compare_records = array();
$compare_query=$conn->query($sql_compare);

if ($compare_query->num_rows > 0) {
    $outp = array();
    $outp = $compare_query->fetch_all(MYSQLI_ASSOC);
    echo json_encode($outp);
}

exit();

【讨论】:

  • 我也试试这个
  • 对不起超级用户先生,当我添加 response = JSON.parse(response);然后晚上什么都没有发生我试图在里面使用警报也没有显示。
  • @Hybreeder 你能分享一下response中的数据吗@
  • 我上传了我的流程代码。在使用 response = JSON.parse(response); 之前,我得到了正确的输出,但格式不正确
  • @Hybreeder 我已经更新了我的答案。你可以用我的回答更新你的 php 代码。
猜你喜欢
  • 2019-02-08
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
相关资源
最近更新 更多