【问题标题】:jquery display multiple json objects returned from phpjquery显示从php返回的多个json对象
【发布时间】:2014-10-09 01:10:46
【问题描述】:

我知道这个问题有点幼稚,但我无法找到解决这个问题的正确方法......

我在网站中使用 jquery 和 ajax 调用用户搜索功能,php 返回 json 对象...

当我使用php文件搜索用户时,如果json返回只有一个数组,jquery会在屏幕上打印出来,但是当返回多个结果时,我不知道打印出来....

这里是从 php 返回的结果:

{"search":"10 
junaid 
saleem 
junaid@yahoo.com 

"}{"search":"13 
zzz 
aaa 
zzz@yahoo.com 

"}

这里是 jquery 网页:

<?php 
session_start();
require("secure_scripts/getusers.php");
require("secure_scripts/getdp.php");
require("secure_scripts/getusersinfo.php");
if(!isset($_SESSION['id'])){
    header("location: index.php");
}else{
    $zxcv_lgn = base64_encode($_SESSION['id']);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome <?php echo getusers("first_name"); ?> | Addressbook.com</title>
    <script src="jquery.js" type="text/javascript" ></script>
    <link rel="stylesheet" href="style.css">
    <script type="text/javascript">
         $(document).ready(function(){
                $("#search_button").click(function(){
                    $("#search_button").click(function(){ $("#console_loader").hide(); });
                    $("#console_loader").fadeIn("slow").html("<img src='images/ajax-loader.gif' id='ajax-loader' />");
                    var send = $("#search").val();
                    $.ajax({
                        type: "POST",
                        url: "secure_scripts/search_users.php",
                        data: {search: send},
                        dataType: "json",
                        success: function(msg){
                            $("#ajax-loader").fadeOut("slow", function(){
                                $("#console_loader img").remove();
                                $("#console_loader").fadeIn("slow").html(msg.search);
                            });
                        }
                    });

                });
            });

    </script>

</head>
<body>
    <div id="header">
        <p><a href="index.php"><img src="images/header_logo.png" /><span>AddressBook™</span></a></p>


    </div>

    <div id="wrapper" align="center">

        <div id="main">
            <div id="content">
                <div id="top_nav">
                    <div class="userinfo"><span class="user_title">Welcome <?php echo getusers("first_name")." ".getusers("last_name"); ?></span></div>
                    <div class="search">
                        <form onsubmit="return false" id="search_form">
                            <input type="text" name="search" class="search_box" id="search" placeholder="Type in to search...">
                            <input type="button" id="search_button" class="sea" name="search_submit"value="search">
                        </form>
                    </div>
                </div>
                <div id="left_nav">
                    <div id="dp"><img src="<?php echo getdp(); ?>"></div>
                    <div class="left_nav_links">Profile</div>
                    <div class="left_nav_links">Contacts</div>
                    <div class="left_nav_links">Settings</div>
                    <div class="left_nav_links">privacy</div>
                    <div class="left_nav_links">logout</div>
                </div>
                <div id="console">
                    <div id="console_top_nav">Your Contacts:</div>
                    <div id="console_content">
                        <div id="console_loader" style="display: none;"></div>
                    </div>
                    </div>
                </div>
            </div>

        </div>

        <div id="footer">
            <div id="links"><ul><li><a href="index.php">Home</a></li><li><a href="about">About</a></li><li><a href="contact">Contact</a></li></ul></div>
            <div id="copyrights">&copy; 2014 Addressbook.com All Rights Reserved</div>
        </div>  

    </div>
</body>
</html>

当php只返回一个对象时,比如:

{"search":"13 
zzz 
aaa 
zzz@yahoo.com 

"}

它可以完美运行,但不适用于多个 json 对象......

提前致谢!

【问题讨论】:

  • 您确定返回的是有效的 json 吗?您应该在最后一次 json_encode()echo 您的结果(例如包含您要返回的所有内容的数组),而不是多次这样做。
  • 在您的success 函数中,尝试将整个响应放入$.each 中,这样您将为每个响应运行该函数,而不仅仅是第一个。 Something like this
  • +1 @CodyReichert - $.each() 将循环遍历您的 json 对象,并允许您使用每个对象,而不仅仅是返回第一个对象。

标签: javascript php jquery ajax json


【解决方案1】:

你需要使用jQuery的.each()方法,像这样:

$(document).ready(function(){
    $("#search_button").click(function(){
        $("#search_button").click(function(){ $("#console_loader").hide(); });
        $("#console_loader").fadeIn("slow").html("<img src='images/ajax-loader.gif' id='ajax-loader' />");
        var send = $("#search").val();
        $.ajax({
            type: "POST",
            url: "secure_scripts/search_users.php",
            data: {search: send},
            dataType: "json",
            success: function (msg) {
                $.each(function (index, item) {
                    $("#ajax-loader").fadeOut("slow", function () {
                        $("#console_loader img").remove();
                        $("#console_loader").fadeIn("slow").html(item.search);
                    });
                });
            }
        });
    });
});

收到您的 json 后,它很可能是一个对象数组

[{"search":"10 
    junaid 
    saleem 
    junaid@yahoo.com 

    "}{"search":"13 
    zzz 
    aaa 
    zzz@yahoo.com 
"}]

因此,通过使用$.each() 循环遍历集合并返回值(index, item),您可以像这样引用它来获取对象的值:

$("#console_loader").fadeIn("slow").html(item.search);

因为 json 返回一个 JavaScript 对象字面量。

【讨论】:

    【解决方案2】:

    这样的事情应该可以工作:

    $.ajax({
      type: "POST",
      url: "secure_scripts/search_users.php",
      data: {search: send},
      dataType: "json",
      success: function(msg){
        $.each(function() {
          $("#ajax-loader").fadeOut("slow", function(){
            $("#console_loader img").remove();
            $("#console_loader").fadeIn("slow").html(msg.search);
          });
        });
      }
    });
    

    我们将 $.each() 方法添加到成功函数中,以便为每个返回的 JSON 对象运行它,而不仅仅是第一个。

    Here's the jQuery.each() doc 供进一步阅读。

    为清晰起见进行了编辑

    【讨论】:

    • 如果 json 作为对象数组接收,我建议使用 $.each(function (index, item){} 并通过 item.search 访问对象,而不是使用 msg.search跨度>
    • 我不知道怎么用,请你指导我@HowardRenollet
    • @JunaidSaleem - 我已经发布了更详细的解释作为答案。如果您有任何其他问题或需要进一步帮助,请告诉我。
    • 好的,我已经尝试了您发布的链接并将该方法应用于我的脚本,但我收到错误:未捕获的类型错误:无法读取未定义的属性“长度”.....行:$.each(results['Users'], function(key, val) {
    • 好的,@CodyReichert 先生感谢您向我展示了正确的方法,我发现了错误,错误是:this ->: $.each(results['Users'], function(key , val),,,, 应该是这样 ->: $.each(results.Users, function(key, val), 再次感谢您的帮助:)
    猜你喜欢
    • 2012-03-31
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多