javascript - Json.data 未正确加载/显示

标签 javascript jquery html json

我正在尝试加载我的 data.json 文件,以便在单击按钮时可以显示文本。我对 JQuery 的奇迹还很陌生,所以我很难理解如何正确地做到这一点。

这是我的 json 文件,是我尝试加载我的 json.data 的 html 部分。你可以看到我尝试将 json.data 加载到 html 中,但是当我这样做时什么也没有显示,而且我不知道如何包装它,想要实现 this, but whit loading data.json into html 。 有人可以帮我解决这个问题吗?

[
    {
        "all": {
            "id": "all",
            "data": {
                "datatext": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
            }
        },
        "cover": {
            "id": "cover",
            "data": {
                "datatext": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
            }
        },
        "diy": {
            "id": "diy",
            "data": {
                "datatext": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
            }
        },
        "marketing": {
            "id": "marketing",
            "data": {
                "datatext": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
            }
        },
        "other": {
            "id": "other",
            "data": {
                "datatext": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
            }
        },
        "special": {
            "id": "special",
            "data": {
                "datatext": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
            }
        },
        "vip": {
            "id": "vip",
            "data": {
                "datatext": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
            }
        },
        "design": {
            "id": "design",
            "data": {
                "datatext": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
            }
        }
    }
]

HTML 部分:

<!doctype html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang=""> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8" lang=""> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9" lang=""> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang=""> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="apple-touch-icon" href="apple-touch-icon.png">



        <link rel="stylesheet" href="css/bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Tangerine">
        <link rel="stylesheet" href="css/bootstrap-theme-min.css">
        <link rel="stylesheet" href="css/main.css">
        <link rel="stylesheet" href="css/font-awesome/css/font-awesome.min.css">
        <link href="css/carousel.css" rel="stylesheet">
        <script>
          $.getJSON("json.data", function( json ){
            $('div[class^="move"]').on('click', function(){
              var id = $(this).attr('id');
              alert(a[id].data.datatext)
              $('#main-view').text(a[id].data.datatext); // in #main-view display text
            })
          });
        </script>

        <script src="js/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script>
    </head>
<body>
        <!--[if lt IE 8]>
            <p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
        <![endif]-->
        <!-- Navigation -->
    <div class="navbar navbar-default navbar-fixed-top" role="navigation">

    <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="#">
            <img style="height: 30px; margin-top: -5px;" class="img-responsive" alt="" src="img/logo/Logo.png">

        </a>
    </div>

    <div class="collapse navbar-collapse navbar-ex1-collapse">

        <ul class="nav navbar-nav">
            <li id="ribbon"><a href="#"></a></li>
            <li><a href="#">Home</a></li>
            <li><a href="#">Protfolio</a></li>
            <li><a href="#">Membership Plan</a></li>
            <li><a href="#">About Us</a></li>
            <li><a href="#">Contact</a></li>
        </ul>

        <div class="col-sm-3 col-md-3 pull-right">
        <form class="navbar-form" role="search">
        <div class="input-group">
            <input type="text" class="form-control" placeholder="Search" name="srch-term" id="srch-term">
            <div class="input-group-btn">
                <button class="btn btn-primary" type="submit"><i class="glyphicon glyphicon-search"></i></button>
            </div>
        </div>
        </form>
        </div>

    </div>
</div>

    <!-- Main jumbotron for a primary marketing message or call to action -->
    <!--SERVICES SECTION -->

      <section class='circle-animation'>
        <div class="container-fluid">
          <div class="row">
            <div class="hidden-xs hidden-sm">
              <div class="col-sm-6 col-sm-offset-3 col-sm-pull-1">
                <div id="middlepapir" class="jumbotron">
                  <div class="row">

                    <img id="main-view" class="papir img-responsive" src="img/circle/11.png" alt="">
                    <div class="row">
                      <div id="all" class="move1 col-sm-4 col-xs-4 col-md-push-4"> 
                          <a href="#"><img class="position1 round" src="img/circle/off/home-all-icon-off.png"></a>
                      </div>
                    </div>
                    <div class="row">
                      <div id="cover" class="move2 col-sm-4 col-xs-4 col-md-push-1">
                          <a href="#"><img class="position2 round" src="img/circle/off/home-cover-icon-off.png"></a>
                      </div>
                    </div>
                    <div class="row">
                      <div id="design" class="move3 col-sm-4 col-xs-4 col-md-push-7">
                          <a href="#"><img class="position3 round" src="img/circle/off/home-design-icon-off.png"></a>
                      </div>
                    </div>
                    <div class="row">
                      <div id="diy" class="move4 col-sm-4 col-xs-4">
                          <a href="#"><img class="position4 round" src="img/circle/off/home-diy-icon-off.png"></a>
                      </div>
                    </div>
                    <div class="row">
                      <div id="marketing" class="move5 col-sm-4 col-xs-4 col-md-push-8">
                          <a href="#"><img class="position5 round" src="img/circle/off/home-marketing-icon-off.png"></a>
                      </div>
                    </div>
                    <div class="row">
                      <div id="other" class="move6 col-sm-4 col-xs-4 col-md-push-1">
                          <a href="#"><img class="position6 round" src="img/circle/off/home-other-icon-off.png"></a>
                      </div>
                    </div>
                    <div class="row">
                      <div id="special" class="move7 col-sm-4 col-xs-4 col-md-push-4">
                          <a href="#"><img class="position7 round" src="img/circle/off/home-special-icon-off.png"></a>
                      </div>
                    </div>
                    <div class="row">
                      <div id="vip" class="move8 col-sm-4 col-xs-4 col-md-push-7">
                          <a href="#"><img class="position8 round" src="img/circle/off/home-vip-icon-off.png"></a>
                      </div>
                    </div>
                  </div>
                </div>   
              </div>  
            </div>  
          </div>    
        </div>
      </section>
            <!--end circle-container-->

最佳答案

您的 JavaScript 代码段在 HTML 的其余部分完成渲染之前运行。

这部分代码需要包装在 $( document ).ready() 中打电话。

    <script>
      $(document).ready(function(){
        $.getJSON("json.data", function( json ){
          $('div[class^="move"]').on('click', function(){
            var id = $(this).attr('id');
            alert(a[id].data.datatext)
            $('#main-view').text(a[id].data.datatext); // in #main-view display text
          });
        });
      });
    </script>

或者,您可以将其移至 <body></body> 的底部标签。这不是一个好的解决方案。仍然将其包装在 document.ready 方法中。

编辑:

由于您从 $.getJSON() 收到 404 Not Found 错误AJAX 调用,这意味着您需要一个服务器。

基本上,如果您的json.data文件实际上并不是从本地主机提供的,您将无法通过将静态 html 文件加载到 Web 浏览器中来进行 ajax 调用。 Setting up a simple Node.js server非常快速且无痛。

您只需设置一个路由来提供 json.data 文件。采取server.js该链接中的代码片段并将 GET 请求部分修改为如下所示:

/* **************
 * GET Requests *
 * **************/

// index.html
app.get(‘/‘, function(req, res) {
  res.sendFile(‘index.html‘);
});

// json.data
app.get(‘json.data‘, function(req, res) {
  res.sendFile(‘json.data‘);
});

此外,您应该考虑重命名 json.datadata.json .

关于javascript - Json.data 未正确加载/显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30497668/

相关文章:

javascript - Chai 期望结果等于三个选项之一

html - 阻止 CSS3 动画对象离开 div

html - 使用 CSS 突出显示标签

javascript - Canvas toDataURL 不返回完整图像

javascript - Syncfusion ejGrid 不显示来自 Web Api 源的数据

javascript - 即使我使用了 .each,为什么只有一个元素会触发该操作?

javascript - 获取span标签内的值并根据条件更改背景颜色?

javascript - <a> 标签上的 preventdefault() 不起作用

html - 2 个 div 元素之间的空间来源未知

javascript - 通过链接包装 Rx JS Observable