大家在实际编写网页时可能会遇到网页中需要嵌套网页的情况,这时候通常想法就是通过iframe标签。

但实际用过的人都知道其有种种的不方便,比较直观的问题就是iframe的自适应高度,这也是处理起来比较麻烦的问题,随便百度下都是一大串的代码。

iframe貌似还有个重大的缺点,那就是搜索引擎的“爬虫”程序无法解读这种页面,当“爬虫”遇到多个页面嵌套的网页时只看到框架却找不到链接,然后认定此网站是死站点并离开。

学过SEO(搜索引擎优化)的朋友都知道,这对网页无疑是毁灭性的打击。

但是我们确实需要嵌套网页怎么办?比如:

这里拿个微信举例,用户都知道当切换下面的功能时顶部的页头及询问的工具栏样式是不变的。所以我们只需要在用户点击下面不同的功能按钮时改变中间的内容即可。

那即使不考虑SEO,至少布局上有没有比iframe更方便的东西呢?jquery ajax就能做到,它不仅能发起请求还能装载页面。

稍微介绍下jquery ajax,首先我们来比较下传统和jquery的ajax的不同

传统javascript ajax封装函数:

function ajax(method,url,param,flag,returnFun){
var httpRequest="";
if(window.XMLHttpRequest){
httpRequest=new XMLHttpRequest();
}else if(window.ActiveXObject){
httpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
httpRequest.onreadystatechange=function(){
if(httpRequest.readyState==4 && httpRequest.status==200){
returnFun(httpRequest.responseText);
}
};
if(method=="get"){
var queryString="";
if(param !="" || param !=null){
queryString="?"+param;
}
httpRequest.open("get",url+queryString,flag);
httpRequest.send(null);
}else if(method=="post"){
httpRequest.open("post",url,flag);
httpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
httpRequest.send(param);
}
}

封装后的写法:

ajax("post","../login.do","username="+username+"&pwd="+pwd,true,function(text){}

参数:1.请求方式 2.请求路径 3.参数传递 4.是否异步刷新 5.回调函数

jquery ajax:

$.ajax({ 选项 })

jquery ajax的选项有很多,简单例几个常用的比如:

data:数据

cache:是否缓存

success/error:成功/失败时的回调函数

type:请求类型

url:请求路径

要想更深入的了解可以下个jquery API看看。

比较实用的两种用法

第一种用法,对服务器的数据进行操作:

    var username="jack";
var password=123;
$.ajax({
type:"post",
url:"../insert.do",
data:"username="+username+"&password="+password,
success:function(msg){
if(msg=="ok"){
alert("complete");
}
}
})

这就是个最简单的通过node.js添加数据的jquery ajax请求。

type设置类型为post;url设置请求路径;data设置要传递的参数,注意写法;如果要查询数据,回调函数中的回调值msg一般转换为JSON字符串的格式传回,要显示出来通过JSON.parse(msg)转换为JSON对象。

第二种用法,就是如何装载页面:

     $.ajax({
url: "index.html",
cache: false,
success: function(html){
$("#content").html(html);
}
});

注意此时回调函数的返回值不再是JSON字符串类型的数据了,而是html网页。

做个简陋的例子:

 <div id="content" style="border: 1px solid red;width: 210px"></div>
<button onclick="turnPage('weixin.html')">微信</button>
<button onclick="turnPage('tongxunlu.html')">通讯录</button>
<button onclick="turnPage('zhaopengyou.html')">找朋友</button>
<button onclick="turnPage('wo.html')">我</button>
 function turnPage(url){
$.ajax({
type:"post",
url:url,
success:function(html){
$("#content").html(html);
}
})
}

设置一id为content的没有定义高度的div,下有四个按钮对应四个不同路径。路径值作为参数传递给turnPage函数,获取指定页面的所有内容,将获取的内容装入id为content的div中。

点击“微信”跳转到weixin.html页面,其中只有一个h1标签:

点击“找朋友”跳转到zhaopengyou.html页面,其中只有一个p标签

可以看到,jquery ajax不仅可以将页面装载到想要的地方,同时框架高度也是根据装载页面内容的高度自动变化的,这也是用jquery ajax来装载页面的优势之一。

感谢您的浏览,希望能对您有所帮助。

使用jquery ajax代替iframe的更多相关文章

  1. python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,

    python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...

  2. Python菜鸟之路:原生Ajax/Jquery Ajax/IFrame Ajax的选用

    原生Ajax Jquery Ajax IFrame Ajax 如果发送的是普通的数据,比如用户简单的输入.选择的值,推荐使用Jquery ,其次用XMLHttpRquest对象,最次使用IFrame ...

  3. 兼容ie的jquery ajax文件上传

    Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...

  4. jQuery Ajax跨域问题简易解决方案

    场景:由于业务需求,需要在一个页面显示另外一个页面,并且右键查看源代码看不到一条链接. 实现方式:使用iframe来显示这个首页,至于首页的地址则使用jQuery Ajax来获取.html代码如下: ...

  5. jQuery Ajax -附示例

    jQuery其实就是一个JavaScript的类库,其将复杂的功能做了上层封装,使得开发者可以在其基础上写更少的代码实现更多的功能. jQuery 不是生产者,而是大自然搬运工. jQuery Aja ...

  6. jquery中对 iframe的操作

    我们先看一下 JQUERY中的对像 contents() 的帮助文件 contents() 概述 查找匹配元素内部所有的子节点(包括文本节点).如果元素是一个iframe,则查找文档内容 示例 描述: ...

  7. jQuery ajax的jsonp跨域请求

    一直在听“跨域跨域”,但是什么是跨域呢?今天做了一些了解.(利用jQuery的jsonp) jQuery使用JSONP跨域 JSONP跨域是利用script脚本允许引用不同域下的js实现的,将回调方法 ...

  8. jquery ajax 跨域

    客户端“跨域访问”一直是一个头疼的问题,好在有jQuery帮忙,从jQuery-1.2以后跨域问题便迎刃而解.由于自己在项目中遇到跨域问题,借此机会对跨域问题来刨根问底,查阅了相关资料和自己的实践,算 ...

  9. 框架----Django之Ajax全套实例(原生AJAX,jQuery Ajax,“伪”AJAX,JSONP,CORS)

    一.原生AJAX,jQuery Ajax,“伪”AJAX,JSONP 1. 浏览器访问 http://127.0.0.1:8000/index/ http://127.0.0.1:8000/fake_ ...

随机推荐

  1. git五分钟教程

    使用Git前,需要先建立一个仓库(repository).您可以使用一个已经存在的目录作为Git仓库或创建一个空目录. 使用您当前目录作为Git仓库,我们只需使它初始化. git init 使用我们指 ...

  2. PHP设计模式系列 - 迭代器

    PHP迭代器: 可帮助构造特定的对象,那些对象能够提供单一标准接口循环或迭代任何类型的可计数数据.(不是特别常用,在PHP中) 使用场景: 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.支持 ...

  3. DOM操作案例之--全选与反选

    全选与反选在表单类的项目中还是很常见的,电商项目中的购物车一定少不了这个功能. 下面我只就用一个简单的案例做个演示吧. <div class="wrap"> <t ...

  4. 基于 Webpack 4 搭建 Vue 开发环境

    自从工作之后,就已经很久没有写过博客了.时间被分割得比较碎,积累了一段时间的学习成果,才写下了这篇博客. 之前有写过 Webpack4 的文章,但是都比较偏入门,唯一的一篇实战篇 -- 基于Webpa ...

  5. BZOJ4517:[SDOI2016]排列计数(组合数学,错排公式)

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  6. BZOJ1513:[POI2006]TET-Tetris 3D(线段树套线段树)

    Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...

  7. 项目--解决MySQL数据库插入中文乱码

    转载自:http://blog.csdn.net/zzh920625/article/details/51226312 情景再现] 如图,在项目中使用MySQL数据库,在做插入操作时,写入英文字符没有 ...

  8. Python学习之路 (一)开发环境搭建

    前言 python3应该是Python的趋势所在,当然目前争议也比较大,这篇随笔的主要目的是记录在centos6.7下搭建python3环境的过程 以及碰到的问题和解决过程. 另外,如果本机安装了py ...

  9. Hadoop学习之路(十二)分布式集群中HDFS系统的各种角色

    NameNode 学习目标 理解 namenode 的工作机制尤其是元数据管理机制,以增强对 HDFS 工作原理的 理解,及培养 hadoop 集群运营中“性能调优”.“namenode”故障问题的分 ...

  10. Hadoop学习之路(八)在eclispe上搭建Hadoop开发环境

    一.添加插件 将hadoop-eclipse-plugin-2.7.5.jar放入eclipse的plugins文件夹中 二.在Windows上安装Hadoop2.7.5 版本最好与Linux集群中的 ...