我需要使用 ajax 动态更改页面的一部分
I need part of the page to be changed dynamically with ajax
我刚刚完成线框图,需要动态更改页面的主要部分,即 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>
此错误 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
通常,我所做的是创建一个路由处理程序,其中包含映射到 url 的 url 哈希值。这样,当我监听 window hashchange 事件时,我可以路由到该哈希对应的 url。该对象将如下所示:
var router = {
"#ajax" : "http://fiddle.jshell.net"
};
然后我使用此对象从 url 异步获取 html,使用路由器和 jquery get 请求(在 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 需要一点时间来处理,因此请给它一点时间来加载。
更新
我更新了我的 fiddle 以包含多个链接(以及将 jquery get
替换为 jquery load
,只是为了加快资源检索),并且如您所见,div 中的内容加载到容器中而无需刷新页面。
如果您按照我的方式实施解决方案,为每个资源使用不同的哈希 URL,那么它应该会很好用。我希望这就是你的意思:)
已更新 jsfiddle 此处:http://jsfiddle.net/zrLLhq30/7/
我刚刚完成线框图,需要动态更改页面的主要部分,即 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>
此错误 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
通常,我所做的是创建一个路由处理程序,其中包含映射到 url 的 url 哈希值。这样,当我监听 window hashchange 事件时,我可以路由到该哈希对应的 url。该对象将如下所示:
var router = {
"#ajax" : "http://fiddle.jshell.net"
};
然后我使用此对象从 url 异步获取 html,使用路由器和 jquery get 请求(在 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 需要一点时间来处理,因此请给它一点时间来加载。
更新
我更新了我的 fiddle 以包含多个链接(以及将 jquery get
替换为 jquery load
,只是为了加快资源检索),并且如您所见,div 中的内容加载到容器中而无需刷新页面。
如果您按照我的方式实施解决方案,为每个资源使用不同的哈希 URL,那么它应该会很好用。我希望这就是你的意思:)
已更新 jsfiddle 此处:http://jsfiddle.net/zrLLhq30/7/