【问题标题】:I need part of the page to be changed dynamically with ajax我需要使用 ajax 动态更改页面的一部分
【发布时间】:2015-09-16 23:35:58
【问题描述】:

我刚刚完成了线框图,需要动态更改页面的主要部分,即 div class="container" 页面的切片部分代表将注入 index.html 的其他内容

请看图片:http://i.stack.imgur.com/IYiTn.jpg

点击上述链接时,RED 部分需要与其他 .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">
        <style>
            body {
                padding-top: 5%;

            }
        </style>
        <link rel="stylesheet" href="css/bootstrap-theme.min.css">
        <link rel="stylesheet" href="css/main.css">
        <link rel="stylesheet" type="text/css" href="dist/css/slider-pro.css" media="screen"/>
        <link rel="stylesheet" type="text/css" href="css/examples.css" media="screen"/>
        <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,600' rel='stylesheet' type='text/css'>

        <script type="text/javascript" src="libs/jquery-1.11.0.min.js"></script>
        <script type="text/javascript" src="dist/js/jquery.sliderPro.min.js"></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]-->
    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
      <div class="container-fluid">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <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="#"><big>Chris Kalmar</big> <small>portfolio</small></a>
          </div>
        </div>
    </nav>
    <div class"container-fluid">
     <div class"row">
     <div class"col-xs-6">

      <ul>
          <li class="branding"><a href="#brand">Branding</a></li>
          <li class="3d"><a href="#3d">3D</a></li>
          <li class="Apps"><a href="#app">Apps</a></li>
      </ul>
    </div>
    </div>  
    </div>

    <div class="container">

    <!-- ajax call--> 




    <!-- /ajax call--> 


    </div><!-- / container--> 



     <footer>
        <p>Chris Kalmar - All rights reserved 2015</p>
    </footer>


       <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
        <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.11.2.min.js"><\/script>')</script>

        <script src="js/vendor/bootstrap.min.js"></script>

        <script src="js/plugins.js"></script>
        <script src="js/main.js"></script>

        <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
        <script>
            (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
            function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
            e=o.createElement(i);r=o.getElementsByTagName(i)[0];
            e.src='//www.google-analytics.com/analytics.js';
            r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
            ga('create','UA-XXXXX-X','auto');ga('send','pageview');
        </script>
<script>
$(document).ready(function(){
    var router = {
        "#brand" : "http://www.chriskalmar.com/branding.html",
        "#3d" : "http://www.chriskalmar.com/3d.html",
    };
    $(window).on("hashchange", function(){
        var route = router[location.hash];
        if (route === undefined) {
            return;
        }
        else {            
            $(".container").load( "" + route + " #content" );
        }            
    });
});
</script>

    </body>
</html>

【问题讨论】:

  • 也发布您的 html。另外,发布 js 错误日志(通过转到浏览器 js 控制台,在 chrome 中按 f12)
  • 嗨 Nishad,刚刚编辑了 Uncaught SyntaxError: Unexpected end of input

标签: ajax dynamic


【解决方案1】:

通常,我所做的是创建一个路由处理程序,其中包含映射到 url 的 url 哈希。这样,当我侦听窗口 hashchange 事件时,我可以路由到该哈希的相应 url。该对象将如下所示:

var router = {
    "#ajax" : "http://fiddle.jshell.net"
};

然后我使用该对象从 url 异步获取 html,使用路由器和 jquery 获取请求(在 hashchange 上):

$(window).on("hashchange", function(){
    var route = router[location.hash];
    if (typeof route === 'undefined') return;            
    $.get( route, function( data ) {
        $( ".sliderContent" ).html( data );
    });                
});

从jquery get 的回调中可以看出,获取到的ajax 数据被注入到sliderContent div 中的DOM 中。我希望这会有所帮助:)

在此处查看工作的 jsfiddle:http://jsfiddle.net/zrLLhq30/5/

编辑:AJAX 需要一点时间来处理,所以给它一点时间来加载。

更新

我已经更新了我的小提琴以包含多个链接(以及将 jquery get 替换为 jquery load,只是为了加快资源检索),并且如您所见,div 中的内容在不刷新页面的情况下加载到容器中。

如果您按照我的方式实施解决方案,为每个资源 URL 使用不同的哈希值,那么它应该会很好用。我希望这就是你的意思:)

在这里更新了 jsfiddle:http://jsfiddle.net/zrLLhq30/7/

【讨论】:

  • 是的,但我需要浏览页面加载的几个链接,但每次都需要刷新,请参见此处:chriskalmar.com
  • 我明白了!很抱歉对于这个误会。每当我需要在使用 AJAX 加载的页面上强制重新加载元素时,我通常会在 URL 上附加一个基于时间的修饰符。例如,我会在我正在加载的 URL 的末尾添加一个 Date.getTime() 查询。我在工作时还没有完全查看你的代码,但如果你还在苦苦挣扎,我会在今晚晚些时候解决它。
  • 刚刚查看了您的代码。问题是,在您的路由器对象中,您尝试检索的 URL 是 http://www.branding.html 和 http://www.3d.html,它们都是 a) 无效 URL 和 b) 不是指向您站点资源的 URL。您的资源将位于http://www.chriskalmar.com/resources/branding.html 之类的 URL。你明白我的意思吗?
  • 看来指向您网站IP的域名是chriskalmar.com,而不是www.chriskalmar.com。从路由器对象的 URL 中省略/删除 www。
  • 您确定您的 html 位于根文件夹中吗?如果您在 AJAX 过程中的某个时刻遇到问题,您应该使用console.log()s 查看您的代码在哪里停止。
【解决方案2】:

这个错误Uncaught SyntaxError: Unexpected end of input 可能是由于缺少右括号而发生的。因此,在您的 jquery click 函数中,将缺少外部右括号。我检查了您的代码,是的,您缺少右括号。

这个错误相关的答案也在这里:JavaScript error (Uncaught SyntaxError: Unexpected end of input)

$(function () { $(".branding").click(function () {
                    $.ajax({
                        url: 'branding.html',
                        data: { id: $(this).attr('id') },
                        cache: false,
                        success: function (data) {
                            $(".container").replaceWith(data);  //try with double qoutes
                        }
                    });
                });
                });//this is the missing paranthesis


$(function () { $(".3d").click(function () {
                        $.ajax({
                            url: '3d.html',
                            data: { id: $(this).attr('id') },
                            cache: false,
                            success: function (data) {
                                $(".container").replaceWith(data);  //try with double qoutes
                            }
                        });
                    });
                    });//this is the missing paranthesis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多