【问题标题】:Dynamically replacing HTML with getJSON by click of button通过单击按钮用 getJSON 动态替换 HTML
【发布时间】:2017-04-09 01:37:03
【问题描述】:

我有一个网页,在正文中显示一个新闻故事,并有一个侧面导航栏,其中列出了其他四个故事。我正在尝试使用 json 文件来换出主体中的 html 文本。每个故事都有自己的 json 文件。这是我当前的 javascript 代码:

$(document).ready(function() {

$("#nav_list a").click(function(evt) {
    buildName = "../json_files/" + $(this).attr("title") + ".json";
    alert(buildName);
    document.getElementById("main").innerHTML = "";

    $.getJSON(buildName, function(data) {
        $.each(data, function() {
            $.each(this, function(key, value) {
                $("#main").append(
                    "<h1>" + value.title + "</h2>" +
                    "<img src='" + value.image + "'>" +
                    "<h2>" + value.month + "<br>" + value.speaker + "</h2>" +
                    "<p>" + value.text + "</p>";
                );
            }); // inner each       
        }); // outer each
    )}; // end of getJSON           

}); // end click    

}); // end ready

注意事项:

  1. 警报(buildName)用于我自己的测试。

  2. 下一行(w. innerHTML)应该清除当前的正文内容。 ** 注意:如果我注释掉了 $.getJSON 方法,这将有效!否则这个和我的 alert() 都会被完全忽略。

  3. 因为每个商店都有自己的 json 文件,所以我质疑 getJSON 中多个 $.each 方法的必要性。它没有任何区别(我下面的格式来自我的教科书,并且已经处理了一个包含多个条目的 json 文件)。

我什至尝试不清除初始的 innerHTML 并覆盖,但我可能有一些语法错误。这是尝试:

        $.getJSON(buildName, function(data) {
            $.each(data, function(key, value) {
                $("#main").append(
                    ("#main h1").innerHTML.replace("<h1>" + value.title + "</h2>");
                    ("#main img").innerHTML.replace("<img src='" + value.image + "'>");
                    ("#main h2").innerHTML.replace("<h2>" + value.month + "<br>" + value.speaker + "</h2>");
                    ("#main p").innerHTML.replace("<p>" + value.text + "</p>");
                )
            }); // endeach
    )}; // end of getJSON  

你们怎么看?我完全被难住了。

【问题讨论】:

    标签: javascript jquery html getjson


    【解决方案1】:

    删除 .append() 中末尾的分号。否则,我不确定。我想对此发表评论而不是回答,但我缺乏声誉。在您的第二次尝试中,不应在 .append() 中进行这些替换调用。祝你好运!

    【讨论】:

    • 感谢您的回复!我删除了分号,但没有骰子是决议。我还尝试消除外部 append(),有和没有双重每个语句(如果这甚至有意义的话)。不管怎样,问题依然存在。
    • 至于隔离问题的步骤,注释掉你的 getJSON 的内部,看看你是否可以从那里得到一个简单的警报。如果可行,请查看您是否可以访问 JSON 数据(用数据填充警报)。您的开发者控制台是否给您任何错误或警告?
    • 好主意,亚当。谢谢你。我在最初的 .getJSON 之后评论了所有内容并添加了警报(“hello”)。它没有用。我没有看到任何错误或警告。
    • 如果是这种情况,您的问题可能是以下两种情况之一:1. 请求返回的不是 200(正常),可能是 404(未找到)或 500(内部服务器错误),或 2. 请求的文件不是有效的 JSON 文件。您可以在 jsonlint.com 验证您的 JSON 数据。我环顾四周,人们建议使用 Chrome 的资源选项卡(在 devtools 中)查看 JSON 请求和响应触发,以便更好地了解问题
    • 哇 .. 好吧,我刚刚在 Aptana 中单击我的程序以复制我的 JSON 文件(应该没问题,这是一个类的示例代码)并且有一个弹出窗口控制台消息。留下评论太长了,但其中大部分似乎是重复的(老实说,我过去忽略了任何控制台弹出窗口并且没有遇到问题:1490923650092 addons.xpi WARN Ignoring missing add-on in C:\Program Files\Trend Micro\AMSP\module\20013\FxExt\firefoxextension
    【解决方案2】:

    我认为问题可能出在您构建的 json 路径上。

    尝试使用标准路径“../file.json”或“file.json”来检查是否有您想要的结果,或者$.getJSON() 是否仍然被忽略。

    关于其他错误:你的开发是什么。环境?

    我还注意到您在标题部分的附加函数中有一个不匹配的括号。所以, "&lt;h1&gt;" + value.title + "&lt;/h2&gt;" + 必须改成..

    "<h1>" + value.title + "</h1>" +
    

    【讨论】:

    • 相同的结果。我已经尝试手动输入路径(../json_files/file.json)并将文件移动到根目录“file.json”。除了清除主要元素的内部 HTML 的行之外,我也在这里评论了大部分内容。这里真的很奇怪。我有一个非常相似的程序,它一切正常,除了它是一个 json 文件而不是多个,并且在根目录中。我正在使用 Aptana Studio 3,构建 3.6.1.2014。我并不十分担心这些错误。
    • 您是否有可能在连接您的活动时遇到问题?您是否尝试在点击事件中使用 :button 选择器而不是导航栏链接?
    【解决方案3】:

    我重新创建了您网站的示例,使用您的代码和 .json 文件似乎一切正常。

    我只需要修改如下所示的代码。在这种情况下,如果您有标题,它也会清除您网站中的标题。

    <!--json  retrieve script starts here -->
    <script>
    $(document).ready(function(){
    $(":button").click(function() {
    buildName = "../json_files/" + $(this).attr("title") + ".json";
    alert(buildName);
    //$("#main").empty();
    document.getElementById("main").innerHTML = "";
    
    $.getJSON(buildName, function(data){
    //$.each(data, function() {
      //  $.each(data, function(key, value){
         $("#main").append(
              "<h1>" + data.title + "</h2>" +
              "<img src='" + data.image + "'>" +
              "<h2>" + data.month + "<br>" + data.speaker + "</h2>" +
              "<p>" + data.text +"</p>"
       );
    // });
    //});
    });
     });
    });
    </script>
    <!--json script end here -->
    

    注意:我已将链接与按钮交换以连接此示例的事件。

    您还可以在单​​个 .json 文件中使用多个文件条目,格式如下:

    {
    "story1":"/jsonfile1.json",
    "story2":"/jsonfile2.json",
    "story3":"/jsonfile3.json"
    }
    

    然后您将使用$.each(data,function(key,value) 对其进行解析,其中值将是通过$.getJSON 请求的文件名,因此您可以让单个文件处理多个条目。

    【讨论】:

      【解决方案4】:

      有一些语法错误 - 括号和花括号乱序,分号错位,诸如此类。逻辑是正确的。

      感谢大家的回复!

      【讨论】:

        猜你喜欢
        • 2011-05-11
        • 1970-01-01
        • 2012-08-06
        • 2016-03-01
        • 1970-01-01
        • 2015-09-21
        • 1970-01-01
        • 2016-07-26
        • 2017-05-31
        相关资源
        最近更新 更多