大家在实际编写网页时可能会遇到网页中需要嵌套网页的情况,这时候通常想法就是通过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. Office 365实现单点登录系列(5)—配置单点登录

    这是单点登录系列的最后一篇文章,前面4篇文章其实都是在为这篇文章的内容做准备,我把这四篇文章的链接放在下面,如果大家有需要,可以参考我以下的链接: Office 365实现单点登录系列(1)—域环境搭 ...

  2. 剑指offer 10矩形覆盖

    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法 java版本: public class Solution { publ ...

  3. php 导出

    //导出 //放在model层的类 <?phpnamespace frontend\models; use yii\base\model; /** * @copyright (c) 2014 a ...

  4. September 21st 2017 Week 38th Thursday

    What fire does not destroy, it hardens. 烈火摧毁不了的东西,只会变得更坚固. The true gold can stand the test of fire, ...

  5. Mongo.exe 无法定位程序输入点terminate于动态链接库 *.dll的解决办法

    Win7 或者Winserver 上安装新版的Mongo后,总是提示如上问题,可使用如下方法解决: 一是系统更新到SP1,并安装了KB2999226这个更新包(重要): 二是安装安装 Visual C ...

  6. Spring MVC Interceptor

    1 在spring-servlet.xml中进行如下配置 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path=& ...

  7. python subprocess 和 multiprocess选择以及我遇到的坑

    The subprocess option: subprocess is 用来执行其他的可执行程序的,即执行外部命令. 他是os.fork() 和 os.execve() 的封装. 他启动的进程不会把 ...

  8. 基于easyui开发Web版Activiti流程定制器详解(二)——文件列表

    上一篇我们介绍了目录结构,这篇给大家整理一个文件列表以及详细说明,方便大家查找文件. 由于设计器文件主要保存在wf/designer和js/designer目录下,所以主要针对这两个目录进行详细说明. ...

  9. oracle删除用户及其表空间

    oracle删除用户及其表空间 删除表空间:可以先将其offlinealter tablespace xx offline;将磁盘上的数据文件一同删除drop tablespace xxx inclu ...

  10. 3942: [Usaco2015 Feb]Censoring

    3942: [Usaco2015 Feb]Censoring Time Limit: 10 Sec Memory Limit: 128 MB Submit: 964 Solved: 480 [Subm ...