代码之家  ›  专栏  ›  技术社区  ›  ImJessW

从用户配置文件页面只需要为用户提取一个JSON字符串并使用jQuery显示

  •  1
  • ImJessW  · 技术社区  · 10 年前

    我只需要从数据库中提取一个案例中的单个用户 我试图实现的流动:

    • 在显示所有用户的页面上开始(我已完成)
    • 单击特定用户
    • 然后它导航到我试图呈现该特定用户的所有数据的页面。

    我目前正在从我为所有用户页面创建的循环中进行建模。我知道我需要摆脱这种循环,但我不确定如何显示相同的信息。我需要帮助确定使用什么来代替下面的循环。第二组文本向您展示了我已经掌握的内容(包括循环)。谢谢

        $(document).ready(function () {
          $.ajax({
          url: "http://.../getaccount",
          type: 'GET',
          dataType: "json",
          data: {
            'account': 'all'
        },
        // once json data is retrieved with the get request using ajaax then display teh following table rows.
        }).then(function (data) {
        // for loop for looping through th elenght o fth json data
        for(var i = 0; i < data.accounts.length; i++){
            // creates the table row every time a new instance is created
            $('#myTable tbody').append("<tr>");
            // pulls image source for each individule user and displays it 
            $('#myTable tbody').append("<td class=\"photo_url\">" + ("<img src='" + data.accounts[i].photo_url + "'/>") + "</td>");
            // displays Turbo user name in a new instance of a user
            $('#myTable tbody').append("<td class=\"user_id\">" + data.accounts[i].user_id + "</td>"); 
            // displays user real name in  
            $('#myTable tbody').append("<td class=\"name\">" + data.accounts[i].name + "</td>");
            // displays individule session token for each user.
            $('#myTable tbody').append("<td class=\"session_token\">" + data.accounts[i].session_token + "</td>");
            // $('#myTable tbody').append("<td class=\"photo_url\">" + data.accounts[i].photo_url + "</td>");   
            $('#myTable tbody').append("</tr><br>"); 
        }
    });
    
    console.log('finished');
    });
    
        $(document).ready(function () {
    $.ajax({
        url: "http://.../getaccount",
        type: 'GET',
        dataType: "json",
        data: {
            'account': 'all'
        },
        }).then(function (data) {
        // for loop for looping through th elenght o fth json data
        for(var i = 0; i < data.accounts.length; i++){
            // i need to find a way to pull the user data from 
            // the indivifule and not  on  loop possibly using the 
            // $(this) method 
            $('body .head').append("<div class=\"photo_url\">" + ("<img src='" + data.accounts[i].photo_url + "'/>") + "</div>");
            $('body .head').append('<h1 class="user_id">'+ data.accounts[i].user_id + '</h1>');
            // finding total matches but using dummy data for now.
            // $('body .sideUl').append('<li class="total_matches">' + data.account[i].total_matches +'</li>');
            $('body .sideUl').append('<li class="total_matches">' + "Total Matches" +'</li>');
            // same thing as above: code is ready to be run but not set up on the server right meow.
            // $('body .sideUl').append('<li class="total_wins">' + data.account[i].total_wins +'</li>');
            $('body .sideUl').append('<li class="total_wins">' + "Total Wins" +'</li>');
        }
    });
        console.log("got info")
    });
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   Nash Worth    10 年前

    首先,我同意@Zhihao,这是一个很好的建议+1. 我的方法在某些方面可能相似,但我将以不同的方式加以说明。

    请回答以下编号的问题:

    1.确认(对我来说)您拥有两个页面的第一次AJAX调用所需的所有数据。是还是否? 如果是,避免重复调用是好的。我们可以探索您的选择。 如果没有,则指定第二个调用应该得到什么。例如,可能API不正确。

    我会把这些拆开:

    是的,您正在获取第一页请求所需的所有数据。然后,单击-您现在知道所选的用户,并拥有该用户的所有数据。对对

    从那里开始,挑战是-如何将数据发送到详细信息页面-这取决于您的架构。

    *a) 如果您使用的是单页应用程序(SPA)或MVC,*这就变得微不足道了,我们只需要将用户的ID(唯一标识符)传递给新布局(如函数参数),并让它(使用ID参数)从存储的结果(模型)中提取数据,然后将该布局(视图)呈现给屏幕。

    但是从你问题中的一些暗示来看,我想你现在正在摇头。 SPA将是您在这里的理想环境。但如果没有,我们继续。。。

    2.确认(对我来说)单页应用程序架构或类似MVC的Backbone.js?或者任何其他js框架。

    b) 如果您的页面是从服务器呈现的,就像大多数Java一样, 您可以通过url末尾的查询字符串参数告诉页面请求了哪个用户。看起来像这样:

    http://www.example.com/userpage.html ?用户=112345

    但同样,这可能不是你的架构。确认是否为

    c) 另一种选择是服务API错误,或者您对它的调用错误。

    这类问题有一种常见的模式,称为“主/详细”模式。其思想是用户列表是“主”,而单个用户是“细节”。

    也许,与其两次调用额外数据 应该 是两个AJAX调用,但两个不同的调用-一个用于所有用户:

    data: {
        'account': 'all'
    },
    

    然后第二个用于特定数据:

    data: {
        'account': data.accounts[i].user_id
    },
    

    我希望这就是答案。您可以通过在此时将真实ID复制并粘贴到代码中来测试此解决方案,例如:

    data: {
        'account': '123real-id456'
    },
    

    看看数据是否回来。 :)

    3) 使用chrome开发工具中的步骤调试器。这是关键。因为您只需单击或悬停在“数据”对象上即可查看所有数据。

    您可以通过键入debugger:

    }).then(function (data) {
      debugger;
    

    当您在源选项卡上时,这将冻结该行代码的执行,然后您可以看到数据的内容,并知道是否有正确的调用。如果用户调用正常,您应该没事。但是如果它跳过了断点,则调用可能会从服务器悄悄返回错误。

    花时间在chrome step调试器教程上是个好主意。

    4) 请确认以上代码在单独的文件中?如果所有代码都在一个js或html中,我们需要讨论其他内容。但我没有看到任何点击处理程序,所以我猜情况并非如此。

    希望这会有所帮助。