使用jquery ajax代替iframe
大家在实际编写网页时可能会遇到网页中需要嵌套网页的情况,这时候通常想法就是通过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的更多相关文章
- python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,
python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...
- Python菜鸟之路:原生Ajax/Jquery Ajax/IFrame Ajax的选用
原生Ajax Jquery Ajax IFrame Ajax 如果发送的是普通的数据,比如用户简单的输入.选择的值,推荐使用Jquery ,其次用XMLHttpRquest对象,最次使用IFrame ...
- 兼容ie的jquery ajax文件上传
Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...
- jQuery Ajax跨域问题简易解决方案
场景:由于业务需求,需要在一个页面显示另外一个页面,并且右键查看源代码看不到一条链接. 实现方式:使用iframe来显示这个首页,至于首页的地址则使用jQuery Ajax来获取.html代码如下: ...
- jQuery Ajax -附示例
jQuery其实就是一个JavaScript的类库,其将复杂的功能做了上层封装,使得开发者可以在其基础上写更少的代码实现更多的功能. jQuery 不是生产者,而是大自然搬运工. jQuery Aja ...
- jquery中对 iframe的操作
我们先看一下 JQUERY中的对像 contents() 的帮助文件 contents() 概述 查找匹配元素内部所有的子节点(包括文本节点).如果元素是一个iframe,则查找文档内容 示例 描述: ...
- jQuery ajax的jsonp跨域请求
一直在听“跨域跨域”,但是什么是跨域呢?今天做了一些了解.(利用jQuery的jsonp) jQuery使用JSONP跨域 JSONP跨域是利用script脚本允许引用不同域下的js实现的,将回调方法 ...
- jquery ajax 跨域
客户端“跨域访问”一直是一个头疼的问题,好在有jQuery帮忙,从jQuery-1.2以后跨域问题便迎刃而解.由于自己在项目中遇到跨域问题,借此机会对跨域问题来刨根问底,查阅了相关资料和自己的实践,算 ...
- 框架----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_ ...
随机推荐
- 字符串到-->list到-->字典的转变
怎么把字符串变成字典呢?? 要先转成列表list(用split方法),然后再把列表转成字典,这时候就用到-->怎么把列表转换成字典呢??列表的索引和字典的新增,然后就能把字符串转成字典了.
- 个人作业——APP案例分析
APP--饿了么:平台--Android 第一部分 调研, 评测 1 个人上手体验 首先送上APP截图一张: 相信很多学生都用过这个APP了,第一次使用都是因为新用户有大额的满减优惠才下载这个APP使 ...
- 手写阻塞队列(Condition实现)
自己实现阻塞队列的话可以采用Object下的wait和notify方法,也可以使用Lock锁提供的Condition来实现,本文就是自己手撸的一个简单的阻塞队列,部分借鉴了JDK的源码.Ps:最近看面 ...
- Java基础面试题(进程和线程的区别)
进程和线程的区别 1.定义 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更 ...
- PHP设计模式系列 - 适配器
什么是适配器: 适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口. 设计情景: 假如我们原始的有一个UserInfo的类,提供用户信息的类,早起设计该类的时候,只实现了一个getUser ...
- C#基础学习之委托的理解和应用
委托的使用和语法定义 委托的使用是由四步来完成的,依次为:声明委托.创建委托对象.委托关联方法.调用 我们用一个例子来说明这四步如何操作,我们完成一个老板委托员工写报告的实例,看如何实现. 首先我们应 ...
- BZOJ1076:[SCOI2008]奖励关(状压DP,期望)
Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...
- npm发布插件步骤
开发好一个插件后,要想让其他人也能使用该插件需要将插件发布到npm上,具体步骤如下: 1.添加npm用户: npm adduser Username: your name Password: your ...
- 移动端适配之sprite雪碧图背景定位
移动端适配一般我会使用rem进行适配,大致操作就是按照一定尺寸设计稿进行制作,最后将所有px值转换为rem,但是一些手机背景精灵图(cssSprite)就会出现一些误差(1px左右),如果公司要求不高 ...
- P1004 方格取数
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...