前端 页面无刷新方案二

开始方案二   用html5     history.pushState(state,null,url);  (IE9及以下版本不支持)

/**
 * HTML5 history and ajax
 */

 $(function(){
    var ajax,
        currentState;
    $(‘li a‘).unbind().bind(‘click‘,function(e){
        e.preventDefault();
        var target = e.target,
            url = $(target).attr(‘href‘);
        !$(this).hasClass(‘current‘) && $(this).addClass(‘current‘).siblings().removeClass("current");
        if(ajax == undefined) {
            currentState = {
                url: document.location.href,
                title: document.title,
                html: $(‘.content‘).html()
            };
        }
        ajax = $.ajax({
                type:‘GET‘,
                url: url,
                dataType:‘html‘,
                success: function(html){

                    var state = {
                        url: url,
                        title: document.title,
                        html: $(‘.content‘).html()
                    };
                    history.pushState(state,null,url);
                    $(‘.content‘).html(html)
                }
        });

    });

 });

首页代码  index.htm

<!DOCTYPE HTML>
<html>
 <head>
  <title> New Document </title>
  <link rel="stylesheet" href="http://css.baojia.com/s4/c/css/reset.css">
  <style>
        body{width: 80%;margin: 0 auto}
        ul { margin: 0 auto; overflow: none}
        /*ul li {float: left; background: #ccc;padding: 15px 20px;}*/
        ul li {display: inline-table; background: #ccc;padding: 15px 20px;  }
        ul li:nth-of-type(1){ margin-left: 0px }
        /*ul li {display: inline-table; background: #ccc;padding: 15px 20px;}*/
        ul li a{color: #f0f0f0;}
        ul li.current{background: #ffde32}
    /*.all-content{width:400px;float:left;overflow:hidden;}*/
  </style>
 </head>

 <body>
    <div class="container">
        <ul class="list">
            <li><a href="page1.htm">页面1</a></li>
            <li><a href="page2.htm">页面2</a></li>
            <li><a href="page3.htm">页面3</a></li>
            <li><a href="page4.htm">页面4</a></li>
            <li><a href="page5.htm">页面5</a></li>
            <li><a href="page6.htm">页面6</a></li>
        </ul>
    </div>
     <div class="content">

        </div>
     <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
    <script src="../js/index.js" type="text/javascript"></script>
 </body>
</html>

拦截url hash并实现页面分发,主要的js

再加上几个测试页面

测试页面1

测试页面2 page2.htm,里面加了一个跳转,因为我们已经拦截a标签的跳转,所以我们也能实现hash跳转

测试页面3  page3.htm   page3.css   引入了一个外链css文件,这里要重点说明一下。我们在这里引入了css3,页面顺利加载了page3.css文件,page3.htm 的样式得以改变,

紧接着我们再回到page2.htm.但是刚才的page3.css的样式没影响到page2.htm。这里是个要注意的问题了,说明样式文件是会被自动移除的,这和页面的样式表重新渲染相符。

.test3{display: block; width: 170px;height: 200px;background-color: #fb9876}

测试页面4  page4.htm。   这里直接进来可以顺利触发fun4的方法

测试页面5  page5.htm      这里可以顺利执行document.body.onload方法    且执行本页的 $(function(){})方法体

测试页面6   page6.htm   page6.js

最后你会发现,文件不管是外链js   还是内页js,  都会被存放在 index.htm。这可能会带来一些不好跟踪的问题

在做这个时候的时候可以脑补一下 htm页面渲染过程css和js的加载流程。

也顺便发现了一下其他该注意的问题

1、inline-table   inline-block   4px间距问题

2、ajax读取本地文件设置问题

时间: 2024-12-21 18:38:52

前端 页面无刷新方案二的相关文章

HTTP与AJAX深入揭秘,不使用AJAX实现页面无刷新

AJAX的原理是什么? 实际上就是发起HTTP请求,既然就是发起HTTP请求,那只要我们能够实现发起HTTP请求就可以在不使用AJAX的情况下实现相同的效果. 在前端有好多方式可以发起HTTP请求,比如script标签的src以及图片的src,css背景图片,等等. 案例1:通过HTTP状态码204实现页面无刷新 下面来一个小案例,实现一个页面无刷新的投票功能. html: <div id="box"> <h1>周杰伦</h1> <p>0

基于jQuery的ajax系列之用FormData实现页面无刷新上传

接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的FormData接口.关于FormData,大家可以看MDN文档. 1,先看效果图 期望的功能和效果很简单:点击页面中的上传文件表单控件,选择文件后点击"ajax提交",将文件上传至服务器,上传成功后,页面给出一个简单的提示. 2,前端的代

JQuery 实现页面无刷新

对于JQuery实现页面无刷新的效果,即:应用这个JQuery这个组件,可以实现在页面上加载数据库中的数据信息,但是并没有给用户页面刷新的感觉,这样既可以有效的进行数据交互,也可以不妨碍用户的其他操作.(http://itred.cnblogs.com    itRed: [email protected]) 在用JQuery实现页面无刷新的效果之前,我们需要掌握和了解一些基础知识,以方便我们在进行代码编写时更加的得心应手. 一.异步技术 浏览器预设是使用同步的方式发出请求并等待回应,为了处理浏

Asp.net页面无刷新请求实现

Asp.net页面无刷新请求实现 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="omAjaxSubmit.aspx.cs" Inherits="OMDemo.demo.omAjaxSubmit" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml&q

Django使用Ajax实现页面无刷新评论回复功能

虽然Django本身自带Form可以提交表单,但在Django中结合Jquery使用Ajax,可以让Django开发的应用发挥更好的用户体验,同时可以降低服务器的负担.普通提交表单方式需要刷新整个页面才可以将评论显示出来,而使用Ajax提交评论之后,可以在页面无刷新的情况下显示出来. 首先是model: class Replay(models.Model): content = models.TextField() post = models.ForeignKey(Post) replay_ti

学习aiax(javascript)--页面无刷新用ajax检查用户名是否已注册(POST方式)

1.jsp代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

学习aiax(javascript)--页面无刷新更新ajax更新时间

1.JSP代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

js界面刷新&Django使用Ajax实现页面无刷新评论回复功能

Django使用Ajax实现页面无刷新评论回复功能 http://www.cnblogs.com/mfc-itblog/p/5188900.html js界面刷新 http://www.cnblogs.com/dingdingo/archive/2011/10/26/2225307.html js界面刷新&Django使用Ajax实现页面无刷新评论回复功能

文件上传的动作不能太俗,必须页面无刷新上传

人生永远没有太晚的开始 好久没有更新博客了,说实话,每天抽空打开博客园总感觉心里很空虚,不是没有在修行,而是因为最近在跟着博老前辈完成一项很重要的使命——打造属于我们自己的奇遇帝国,好了废话不多说,首先我在北京向各位带好,希望各位能在2018年达到自己预设的人生高度. 常规操作上传文件 1 <form action="xxx.action" method="post" enctype="multipart/form-data"> 2