GVKun编程网logo

php+html5实现无刷新图片上传教程(html无刷新跳转)

20

如果您对php+html5实现无刷新图片上传教程和html无刷新跳转感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解php+html5实现无刷新图片上传教程的各种细节,并对html无刷新跳转进行

如果您对php+html5实现无刷新图片上传教程html无刷新跳转感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解php+html5实现无刷新图片上传教程的各种细节,并对html无刷新跳转进行深入的分析,此外还有关于Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现、HTML5 History API 实现无刷新跳转 _html5教程技巧、HTML5 History API实现无刷新跳转、HTML5 实现无刷新修改 URL的实用技巧。

本文目录一览:

php+html5实现无刷新图片上传教程(html无刷新跳转)

php+html5实现无刷新图片上传教程(html无刷新跳转)

本篇向大家介绍一种全新的上传图片的方式,利用html5的FileReader读取图片文件,然后将数据传输到服务器再使用PHP进行处理。实现过程如下(带图片预览功能)
前端html代码 upload,html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>上传</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<style>
.upload{
  width:300px;
  height:200px;
  position:relative;
}
.upload input[type=''file'']{
  position:absolute;
  width:70px;
  top:0;
  left:0;
  z-index:10;
  opacity:0;
  filter:alpha(opacity=0);
}
.upload input.selbutton{
  width:70px;
  height:30px;
  background:#cf001b;
  color:#FFF;
  font-size:14px;
  position:absolute;
  top:0;left:0;
  z-index:9;
  border:none;
  cursor:pointer;
}
.upload input.upbutton{
  width:70px;
  height:30px;
  background:#cf001b;
  color:#FFF;
  font-size:14px;
  position:absolute;
  top:50px;left:0;
  z-index:10;
  border:none;
  cursor:pointer;
}
</style>
</head>
<body>
<divupload''>
  <input type="file" name="file" />
  <input type="button" name="selbutton"value="选择文件" />
  <input type="button" name="upbutton"value="上传" />
</div>
<divpreviews''>
  <img src="#"alt="图片预览"/>
</div>
</body>
</html>

样式如下图

接下来是js代码

<script type="text/javascript">
  $(".upbutton").click(function(){
    //定义允许上传的图片格式 在前台就可以直接判断,不合法的格式将不会上传
   var filetype = [''jpg'',''jpeg'',''png'',''gif''];
   if($(''.image'').get(0).files){
      fi = $(''.image'').get(0).files[0]; //得到文件信息
      //判断文件格式是否是图片 如果不是图片则返回false
      var fname = fi.name.split(''.'');
      if(filetype.indexOf(fname[1].toLowerCase()) == -1){
        alert(''文件格式不支持'');
        return ;
      }
      //实例化h5的fileReader
      var fr = new FileReader();
      fr.readAsDataURL(fi); //以base64编码格式读取图片文件
      fr.onload = function(frev){
        pic = frev.target.result; //得到结果数据
      //开始上传之前,预览图片
 $(''.image_thumb'').attr(''src'',pic);
//使用ajax 利用post方式提交数据
        $.post(
          ''handle.php'',
          {
             message:pic,
            filename:fname[0],
            filetype:fname[1],
            filesize:fi.size
          },
          function(data){
            data = eval(''(''+data+'')'');
            if(data.code == 1 || data.code == 2){
              console.log(''上传失败'')
            }else if(data.code == 0){
              console.log(''上传成功'')
            }
          }
        );
      }
    }
  })
</script>

接下来是PHP处理代码  handle.php

$imgtype = array(
  ''gif''=>''gif'',
  ''png''=>''png'',
  ''jpg''=>''jpeg'',
  ''jpeg''=>''jpeg''
); //图片类型在传输过程中对应的头信息
$message = $_POST[''message'']; //接收以base64编码的图片数据
$filename = $_POST[''filename'']; //接收文件名称
$ftype = $_POST[''filetype'']; //接收文件类型
//首先将头信息去掉,然后解码剩余的base64编码的数据
$message = base64_decode(substr($message,strlen(''data:image/''.$imgtype[strtolower($ftype)].'';base64,'')));
$filename = $filename.".".$ftype;
$furl = "D:/now/";
//开始写文件
$file = fopen($furl.$filename,"w");
if(fwrite($file,$message) === false){
  echo json_encode(array(''code''=>1,''con''=>''failed''));
  exit;
}
echo json_encode(array(''code''=>0,''con''=>$filename));

选择文件然后点击上传的效果如下图

以上就是整个图片上传的代码。当然对于PHP的部分还有很多可以优化的地方,比如文件名部分,可以重命名,以保证相同文件名上传以后的文件名是不同的等等。这种上传方式我也是刚开始使用,当初是受Node.js做上传的的启发,然后尝试着应用于PHP,没想到还真能上传成功。

希望大家也可以按照此方法实现图片上传。

您可能感兴趣的文章:
  • php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
  • PHP使用HTML5 FileApi实现Ajax上传文件功能示例
  • 使用PHP和HTML5 FormData实现无刷新文件上传教程
  • php+html5+ajax实现上传图片的方法
  • php+html5使用FormData对象提交表单及上传图片的方法
  • php 使用html5实现多文件上传实例
  • PHP 文件上传进度条的两种实现方法的代码
  • php实现简单的上传进度条
  • php上传文件并显示上传进度的方法
  • PHP+Ajax无刷新带进度条图片上传示例
  • PHP+Ajax实现上传文件进度条动态显示进度功能
  • php 使用html5 XHR2实现上传文件与进度显示功能示例

Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现

Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现

兼容性想还不错:FF,CH,IE,猎豹,都是可以实现的。如果看到回显。当然就是成功了。

经历了好几天的不停的钻牛角尖,终于将这个二货弄出来了。真是煞费苦心啊。但是做出来的瞬间还是蛮开心的。

第一步:我们需要加载几个JS库。
jquery库。
jquery.form.js库。

下载这两个库,并引用到页面中。

以下为页面中 JS 代码:

复制代码 代码如下:

  function upload() {
            var options = {
                type: "POST",                            //当然这个是传送方式
                url: ''../Include/Files.ashx'',        //一般处理程序的路径
                success: function (msg) {        //返回的参数
                    $("#server_img").attr("src", msg);            //回显图片。
                }
            };
            // 将options传给ajaxForm
            $(''#aspnetForm'').ajaxSubmit(options);
 }

第二步:一般处理程序内的代码
复制代码 代码如下:

 public void ProcessRequest(HttpContext context)
    {
        HttpFileCollection files = context.Request.Files;              // From中获取文件对象
        if (files.Count > 0)
        {
             string path = "";                                                            //路径字符串
            Random rnd = new Random();
            for (int i = 0; i < files.Count; i++)
            {
                HttpPostedFile file = files[i];                                        //得到文件对象
                if (file.ContentLength > 0)
                {
                    string fileName = file.FileName;
                    string extension = Path.GetExtension(fileName);
                    int num = rnd.Next(5000, 10000);                            //文件名称
                    path = "../../UserFiles/temp/" + num.ToString() + extension;
                    file.SaveAs(System.Web.HttpContext.Current.Server.MapPath(path));        //保存文件。
                }
            }
            context.Response.Write(path);            //返回文件存储后的路径,用于回显。
        }
    }

第三步:html或者aspx中的代码。
    以下两句代码随便插入html或者aspx中的任意位置。想来都是可以实现的。
复制代码 代码如下:

    <img id="server_img" width="360px"   title="" alt="" />   //用于回显图片
    <asp:FileUpload ID="Up_load" runat="server" onchange="upload()"  ontextchange="upload()"/>        //上传图片,自动的,两个事件是为了保证所有浏览器都兼容。

您可能感兴趣的文章:

HTML5 History API 实现无刷新跳转 _html5教程技巧

HTML5 History API 实现无刷新跳转 _html5教程技巧

有一次在上**网的时候,发现登陆、注册动画效果非常华丽,但让我感到震惊的是页面竟能够实现无刷新跳转(已改版,观看此效果可以猛击此处:github或阅fm),回顾了所学的前端知识,似乎没有任何技术可以实现这一点,于是百度了一下,才发现这原来是使用html5中history api实现的效果,但奈何一直未曾派上用场。直到博客改版时,才将这一技术应用起来。
在html5中,
1. 新增了通过js在浏览器历史记录中添加项目的功能。
2. 在不刷新页面的前提下显示改变浏览器地址栏中的url。
3. 添加了当用户单击浏览器的后退按钮时触发的事件。
通过以上三点,可以实现在不刷新页面的前提下动态改变浏览器地址栏中的url,动态显示页面内容。
比如: 当页面a和页面b内容不一样的时候,在html5之前,如果从页面a切换到页面b时,需要在浏览器下从页面a切换到页面b,或者说,如果需要有后退按钮功 能的话,可以在url地址加#xxxx 可以实现后退功能。那么现在在html5中,可以通过history api实现如下处理即可:
1. 在a页面 通过发ajax请求 请求页面中的b数据。
2. 在页面a中通过js装载相应的信息到相应的位置来。
3. 通过history api在不刷新页面的情况下在浏览器的地址栏中从页面a的url地址切换到页面b的url地址。
html4中的history api
属性
1.length 历史的项数。javascript 所能管到的历史被限制在用浏览器的“前进”“后退”键可以去到的范围。本属性返回的是“前进”和“后退”两个按键之下包含的地址数的和。
方法
1.back() 后退,跟按下“后退”键是等效的。
2.forward() 前进,跟按下“前进”键是等效的。
3.go() 用法:history.go(x);在历史的范围内去到指定的一个地址。如果 x 0,则前进 x 个地址,如果 x == 0,则刷新现在打开的网页。history.go(0) 跟 location.reload() 是等效的。
html5中的history api
1. history.pushstate(data, title [, url]):往历史记录堆栈顶部添加一条记录;data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器都会 忽略此参数;url为页面地址,可选,缺省为当前页地址。
2. history.replacestate(data, title [, url]) :更改当前的历史记录,参数同上。
3. history.state:用于存储以上方法的data数据,不同浏览器的读写权限不一样。
4. popstate事件:当用户单击浏览器的后退或者前进按钮时触发该事件。在事件处理函数中读取触发事件的事件对象的state属性值,该属性值即为执行pushstate方法时所使用的第一个参数值,其中保存了在向浏览器历史记录中添加记录同步保存的对象。
到目前为止,ie10,firefox4以上的版本,chrome8以上的版本,safari5,opera11以上的版本浏览器支持html5中的history api。
html:

复制代码
代码如下:




new document








  • 测试


  • 测试


  • 测试












JS:

复制代码
代码如下:

/**
* HTML history and ajax
*/
$(function(){
var ajax,
currentState;
$(''.container li'').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:''POST'',
url: url,
dataType:''json'',
success: function(data){
var html = '''';
if(data.length > ) {
for(var i = , ilist = data.length; i html += ''
  • '' +data[i].age+ ''
  • '' +
    ''
  • '' +data[i].name+ ''
  • '' +
    ''
  • '' +data[i].sex+ ''
  • '';
    }
    $(''.content'').html(html);
    }
    var state = {
    url: url,
    title: document.title,
    html: $(''.content'').html()
    };
    history.pushState(state,null,url);
    }
    });
    });
    window.addEventListener(''popstate'',function(event){
    if(ajax == null){
    return;
    }else if(event && event.state){
    document.title = event.state.title;
    $(''.content'').html(event.state.html);
    }else{
    document.title = currentState.title;
    $(''.content'').html(currentState.html);
    }
    });
    });

    HTML5 History API实现无刷新跳转

    HTML5 History API实现无刷新跳转

    在HTML5中

      1. 新增了通过JS在浏览器历史记录中添加项目的功能。

          2. 在不刷新页面的前提下显示改变浏览器地址栏中的URL。

          3. 添加了当用户单击浏览器的后退按钮时触发的事件。

     通过以上三点,可以实现在不刷新页面的前提下动态改变浏览器地址栏中的URL,动态显示页面内容。

     比如: 当页面A和页面B内容不一样的时候,在HTML5之前,如果从页面A切换到页面B时,需要在浏览器下从页面A切换到页面B,或者说,如果需要有后退按钮功 能的话,可以在URL地址加#XXXX 可以实现后退功能。那么现在在HTML5中,可以通过History API实现如下处理即可:

      1. 在A页面 通过发AJAX请求 请求页面中的B数据。

      2. 在页面A中通过JS装载相应的信息到相应的位置来。

      3. 通过History API在不刷新页面的情况下在浏览器的地址栏中从页面A的URL地址切换到页面B的URL地址。  

      HTML4中的History API

    属性

    1. length 历史的项数。javascript 所能管到的历史被限制在用浏览器的“前进”“后退”键可以去到的范围。本属性返回的是“前进”和“后退”两个按键之下包含的地址数的和。

    方法

    1. back() 后退,跟按下“后退”键是等效的。
    2. forward() 前进,跟按下“前进”键是等效的。
    3. go() 用法:history.go(x);在历史的范围内去到指定的一个地址。如果 x < 0,则后退 x 个地址,如果 x > 0,则前进 x 个地址,如果 x == 0,则刷新现在打开的网页。history.go(0) 跟 location.reload() 是等效的。

    HTML5中的History API

      1. history.pushState(data,title [,url]):往历史记录堆栈顶部添加一条记录;data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器都会 忽略此参数;url为页面地址,可选,缺省为当前页地址。

      2. history.replaceState(data,url]) :更改当前的历史记录,参数同上。

      3. history.state:用于存储以上方法的data数据,不同浏览器的读写权限不一样。

      4. popstate事件:当用户单击浏览器的后退或者前进按钮时触发该事件。在事件处理函数中读取触发事件的事件对象的state属性值,该属性值即为执行pushState方法时所使用的第一个参数值,其中保存了在向浏览器历史记录中添加记录同步保存的对象。

     到目前为止,IE10,firefox4以上的版本,Chrome8以上的版本,Safari5,Opera11以上的版本浏览器支持HTML5中的History API。

    为什么要使用History API

        在ajax给我们带来提高用户体验、减少HTTP连接数等好处的同时,也渐渐显露出一些不足之处,比如:

    1. 无法使用浏览器的前进、后退来切换前后数据。
    2. 单纯地使用AJAX不利于搜索引擎优化。

     截图演示如下:

     如上面的效果,页面一进来的时候是 index.html 当我点击 测试1 时候 显示测试1中的内容 浏览器地址转到测试1的URL,同理测试2和测试3都一样,接着我们可以通过地址栏中的前进和后退按钮也可以操作。

    基本的代码如下:

    index.html

    <div>
        <ul>
            <li>
                <a href="http://localhost/demo/html5/index.PHP">测试1</a>
            </li>
            <li>
                <a href="http://localhost/demo/html5/index2.PHP">测试2</a>
            </li>
            <li>
                <a href="http://localhost/demo/html5/index3.PHP">测试3</a>
            </li>
        </ul>
    
        <div>
            <ul>
                <li>111</li>
                <li>222</li>
                <li>333</li>
            </ul>
        </div>
    </div>

    index.PHP代码输出如下:就是输出一个JSON格式

    <?PHP
        $data = json_decode(file_get_contents("PHP://input"));
        header("Content-Type: application/json; charset=utf-8");
        echo ("[{"age" : 24,"sex" : "boy","name" : "huangxueming"},{"age" : 26,"name" : "huangxueming2"}]");
    ?>

    index2.PHP代码输出如下:

    <?PHP
        $data = json_decode(file_get_contents("PHP://input"));
        header("Content-Type: application/json; charset=utf-8");
        echo ("[{"age" : 65,"sex" : "boy2","name" : "huangxueming2"},sans-serif; text-indent:2em"> index3.PHP代码输出如下:

    <?PHP
        $data = json_decode(file_get_contents("PHP://input"));
        header("Content-Type: application/json; charset=utf-8");
        echo ("[{"age" : 244,"sex" : "boy4","name" : "huangxueming4"},{"age" : 264,"name" : "huangxueming4"}]");
    ?>

    JS所有的代码如下:

    /**
     * HTML5 history and ajax
     */
    
     $(function(){
        var ajax,        currentState;
        $(".container li").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:"POST",                url: url,                dataType:"json",                success: function(data){
                        var html = "";
                        if(data.length > 0) {
                            for(var i = 0,ilist = data.length; i < ilist; i++) {
                                html += "<li>" +data[i].age+ "</li>" + 
                                        "<li>" +data[i].name+ "</li>" +
                                        "<li>" +data[i].sex+ "</li>";
                            }
                            $(".content").html(html);
                        }
                        var state = {
                            url: url,                        title: document.title,                        html: $(".content").html()
                        };
                        history.pushState(state,null,url);
                    }
            });
            
        });
    
        window.addEventListener("popstate",function(event){
            if(ajax == null){
                    return;
                }else if(event && event.state){
                    document.title = event.state.title;
                    $(".content").html(event.state.html);
                }else{
                    document.title = currentState.title;
                    $(".content").html(currentState.html);
                }
        });
     });

    HTML5 实现无刷新修改 URL

    HTML5 实现无刷新修改 URL

    前言

    今天在做一个 vue 的搜索功能,需要从搜索结果页面跳转到细节页面,然后点击返回还能返回到刚刚的结果页面,如果只用 window.history.go (-1) 当然会重新刷新搜索页面,当然是不行的。

    我尝试了俩种方式来修改 url:

    1. window.location.href, 拼接一个搜索的 key 值,点击搜索的同时,刷新了页面,url 改变了,功能是实现了,可是 bug 来了...,搜索页面闪烁后才进入结果页,而结合不跳转页面就不会发生闪烁的情况,所以当页面刷新时,vue 实例都会被重新加载。
    2. window.location.hash,url 中 #为网页中的一个位置,当读取此 url 时,页面会自动滚动到锚点处。这种方法不会向服务器发送请求,也不会重载页面。可读写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。

    新增 API

    百度后发现 HTML5 为 window.history 对象引入了两个新的 api 是 history.pushState()history.replaceState() 方法,它们分别可以添加和修改历史记录条目。这些方法通常与 window.onpopstate 事件配合使用。两种 api 都能改变当前的 url,不同的是,pushState 在浏览器中创建一条新的历史记录,而 history.replaceState 仅仅替换当前地址为指定 url。

    HTML5 新增的历史记录 API 均可以实现无刷新更改地址栏链接,配合 AJAX 完全可以做到无刷新跳转。他们的作用非常大,可以做到改变网址却不需要刷新页面,这个特性后来用到了单页面应用中比如:vue-router,react-router-dom 里面。那么下面介绍新 API 的使用方法

    pushState 方法

    上面提到的这套 API 提供一种「人为操纵」浏览器历史记录的方法。

    我们可以将浏览器历史记录可以看作一个「栈」。栈是一种后进先出的结构,可以把它想象成一摞盘子,用户每点开一个新网页,都会在上面加一个新盘子,叫「入栈」。用户每次点击「后退」按钮都会取走最上面的那个盘子,叫做「出栈」。而每次浏览器显示的自然是最顶端的盘子的内容。

    语法:window.history.pushState(state, title, url);
    

    执行 pushState 函数之后,会往浏览器的历史记录中创建一条新记录,同时改变地址栏的地址内容。它可以接收三个参数,按语法顺序分别为:

    1. 一个 state 对象或者字符串,用于描述新记录的一些特性。这个参数会被一并添加到历史记录中,以供以后使用。这个参数是开发者根据自己的需要自由给出的。该值是后期可以通过 history.state; 获取当前页面的参数,
    2. 一个字符串,代表新页面的标题。当前基本上所有浏览器都会忽略这个参数。
    3. 一个字符串,代表新页面的相对地址。(必须与当前页面处在同一个域。)

    简单例子:假设当前页面为 renfei.org/,打开控制台执行下面的 JavaScript 语句:

    window.history.pushState({id: 1,name: "profile1"}, "My Profile", "/profile/");  //第一二参数可忽略设置为null
    

    之后,地址栏的地址就会变成 renfei.org/profile/,但同时浏览器不会刷新页面,甚至不会检测目标页面是否存在。

    replaceState 方法

    有时,你希望不添加一个新记录,而是替换当前的记录,俩者区别在于 replaceState () 是修改了当前的历史记录项而不是新建一个。

    replaceState 和 pushState 原理一样使用也一样,最常用的方法:

    window.history.replaceState({id: 1,name: "profile"},''下载'',''download?id=1'');
    

    特点:replaceState 不会加入到历史记录里面,用 history.go (-1) 会跳过当前页面相当于是 history.go (-2)。

    popstate 事件

    当页面加载时,它可能会有一个非空的 state 对象。这可能发生在当页面设置一个 state 对象 (使用 pushState 或者 replaceState) 之后用户重启了浏览器。当页面重新加载,页面将收到 onload 事件,但不会有 popstate 事件。然而,如果你读取 history.state 属性,将在 popstate 事件发生后得到这个 state 对象

    var currentState = history.state; //得到当前页面设置的history.pushState的state对象参数值
    

    调用 history.pushState () 或者 history.replaceState () 不会触发 popstate 事件。 popstate 事件只会在浏览器某些行为下触发, 比如点击后退、前进按钮 (或者在 JavaScript 中调用 history.back ()、history.forward ()、history.go () 方法)。

    例子:假设当前页面地址是 http://example.com/index.html

    window.onpopstate = function(event) {
      alert("location: " + document.location.href + ", state: " + JSON.stringify(event.state));//拿到history.state对象值
    };
    //绑定事件处理函数. 
    history.pushState({page: 1}, "title 1", "?page=100");    //添加并激活一个历史记录条目 http://example.com/index.html?page=100,条目索引为1    //history.state为{page: 1}
    history.pushState({page: 2}, "title 2", "?page=200");    //添加并激活一个历史记录条目 http://example.com/index.html?page=200,条目索引为2
    history.replaceState({page: 3}, "title 3", "?page=300"); //修改当前所在页面激活的历史记录条目 http://ex..?page=200 变为 http://ex..?page=300,条目索引为3
    
    history.back(); // 弹出 "location: http://example.com/index.html?page=100, state: {"page":1}"
    history.back(); // 弹出 "location: http://example.com/index.html, state: null
    history.go(2);  // 弹出 "location: http://example.com/index.html?page=300, state: {"page":3}
    

    pushState 方法与设置 hash 值的区别

    在某种意义上,调用 pushState () 与 设置 window.location = "#foo" 类似,二者都会在当前页面创建并激活新的历史记录。但 pushState () 具有如下几条优点:

    1. 新的 URL 可以是与当前 URL 同源的任意 URL 。而设置 window.location 仅当你只修改了哈希值时才保持同一个文件。
    2. 如果需要,可以不必改变 URL 就能创建一条历史记录。而设置 window.location.hash = "#foo"; 只有在当前哈希不是 #foo 的情况下, 才会创建一个新的历史记录项。
    3. 我们可以为新的历史记录项关联任意数据。而基于哈希值的方式,则必须将所有相关数据编码到一个短字符串里。

    需要注意的是通过 history.pushState 修改网页的 URL 地址,在配合相关代码显示隐藏相应界面便可以实现单页面多界面相互操作。该方法比直接访问 URL 地址速度快,执行效率高,UI 体验好,但会增加页面的复杂性及耦合性,要视实际情况而定,一般都用在 dialog 弹出框上。

    应用:全站 AJAX,并使浏览器能够抓取 AJAX 页面

    这个可以干啥用?一个比较常用的场景就是,配合 AJAX。

    假设一个页面左侧是若干导航链接,右侧是内容,同时导航时只有右侧的内容需要更新,那么刷新整个页面无疑是浪费的。这时我们可以使用 AJAX 来拉取右面的数据。但是如果仅仅这样,地址栏是不会改变的,用户无法前进、后退,也无法收藏当前页面或者把当前页面分享给他人;搜索引擎抓取也有困难。这时,就可以使用 HTML5 的 History API 来解决这个问题。

    思路:首先绑定 click 事件。当用户点击一个链接时,通过 preventDefault 函数防止默认的行为(页面跳转),同时读取链接的地址(如果有 jQuery,可以写成 $(this).attr (''href'')),把这个地址通过 pushState 塞入浏览器历史记录中,再利用 AJAX 技术拉取(如果有 jQuery,可以使用 $.get 方法)这个地址中真正的内容,同时替换当前网页的内容。

    为了处理用户前进、后退,我们监听 popstate 事件。当用户点击前进或后退按钮时,浏览器地址自动被转换成相应的地址,同时 popstate 事件发生。在事件处理函数中,我们根据当前的地址抓取相应的内容,然后利用 AJAX 拉取这个地址的真正内容,呈现,即可。

    最后,整个过程是不会改变页面标题的,可以通过直接对 document.title 赋值来更改页面标题。

    今天的关于php+html5实现无刷新图片上传教程html无刷新跳转的分享已经结束,谢谢您的关注,如果想了解更多关于Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现、HTML5 History API 实现无刷新跳转 _html5教程技巧、HTML5 History API实现无刷新跳转、HTML5 实现无刷新修改 URL的相关知识,请在本站进行查询。

    本文标签:

    上一篇PHP中的随机性 你觉得自己幸运吗?(php随机ua)

    下一篇两种php实现图片上传的方法(两种php实现图片上传的方法是)