ajax将响应结果显示到iframe,JavaScript:iframe / Ajax / JSON

iframe

在Ajax流行之前大量使用:

iframe中的src属性指定的就是一个独立的页面url地址,iframe中呈现的就是这个页面的内容。

通过改变src的值,我们就可以轻松的改变iframe中的内容(类似的,刷新验证码也是同样的手段):

document.getElementById('keywords').src = "/Iframe2.html";

演示:略

独立页面

注意,iframe加载的是一个独立的页面,所以子页面无法直接调用父页面的内容

子页面调用父页面需要:window.parent

window.parent.document.getElementsByTagName('p')[0].innerText = "全程直播";

父页面调用子页面需要:window.frames[n]

window.frames[0].document.getElementsByTagName('div')[0]

.setAttribute('style', "border: 1px dashed");

演示:略

Ajax技术特点

主要特点

仍然是一个HTTP请求,所以遵守HTTP协议

无页面刷新的交互,提升了用户体验

可以只获取“部分页面”甚至是简单数据,降低了流量消耗

XMLHttpRequest 对象

(现代浏览器)直接new出来就行:

var xhttp = new XMLHttpRequest();

接下来都围绕这XMLHttpRequest对象展开。

发起请求

Ajax需要由客户端主动发起:

open()

可以有5个参数,依次为:

method:请求方式, 字符串GET或POST (复习)

url:请求访问的文件路径

async:true(异步,默认)或 false(同步,已经不推荐了)

user:(可选的)用户名称

psw:(可选的)密码

send()

GET时不用带参数,因为参数都可以在url中直接包含,如:

xhttp.open("GET", "/Ajax.html?id=8");

xhttp.send();

(复习:有时候需要url参数避免缓存)

POST时通常把参数信息放在send()中,如:

//POST时必须设定,否则默认类型为text/plain,影响后台程序转换

xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhttp.send("fname=Bill&lname=Gates");

x-requested-with:xml

演示:F12查看请求内容

8c43d2a843a1659c4ff907dbf750277d.png

号外:出于安全原因,现代浏览器不允许跨域访问。

事件响应

理解异步

@想一想@:为什么不能直接返回响应结果?比如:

var result = xhttp.send();

因为send()的结果需要服务器的响应,但需要多久服务器才能响应呢?在等待服务器响应的这个时间段,JavaScript代码就停在这里等着么?如果是这样,这就叫做“同步”

但Ajax是异步的。即:一旦完成send(),不需要等待send()的结果,就会立即执行后面的代码。

所以,当Ajax的响应到达服务器了怎么办呢?用事件来响应:

onreadystatechange

将该事件绑定到XMLHttpRequest即可:

xhttp.onreadystatechange = function() {

判断状态

readyState:保存了 XMLHttpRequest 的状态。

0: 请求未初始化,open()之前

1: 服务器连接已建立,open()之后

2: 请求已接收

3: 正在处理请求

4: 请求已完成且响应已就绪

xhttp.onreadystatechange = function () {

console.log('in onreadystatechange:' + this.readyState);

};

服务器响应

服务器

responseText

status

responseXML

statusText

为保险起见,我们通常都是在获得完整的、正确的Response响应之后

if (this.readyState === 4 && this.status === 200) {

如果要动态的获得Json数据,见:ASP.NET RazorPage和 MVC 相关章节。

JSON

全称:JavaScriptObjectNotation

作为XML的替代品,风靡全球:简洁

序列化:将对象的状态信息转换为可以存储或传输的形式的过程(简单理解:内存 => I/O)

必须是UTF-8,包含6种类型:

number:和JavaScript的number完全一致;

boolean:就是JavaScript的true或false;

string:就是JavaScript的string;

null:就是JavaScript的null;

array:就是JavaScript的Array表示方式——[];

object:就是JavaScript的{ ... }表示方式

一个标准的Json序列化示例:

var laoCheng = {

name: '老程',

age: 21,

isFemale: true,

hobby: ['tabletennis', 'basketball','swim'],

course: {

'C#' : 86,

'HTML/CSS/JavaScript' : 95,

SQL: 92,

'ASP.NET': null

}

}

如何进行序列化/反序列化

console.log(JSON.stringify(laoCheng));

console.log(JSON.stringify(laoCheng, ['age'])); //指定只序列化age属性

console.log(JSON.stringify(laoCheng, null, ' ')); //格式化:换行和缩进

console.log(JSON.stringify(laoCheng, function (key, value) {

if (typeof value === 'string') {//key:属性,value:属性值

return value.toUpperCase();

}

return value;

}));

最应该小心的,其实还是这些玩意(尤其是null和undefined):

反序列化:

var lz = JSON.parse('{"name":"老程","age":21,"isFemale":true,"hobby":["tabletennis","basketball","swim"],"course":{"C#":86,"HTML/CSS/JavaScript":95,"SQL":92,"ASP.NET":null}}')

观察:反序列化除 array 以外,不保证各属性的顺序。

parse中也可传入 function(key, value) 函数

向后台发送JSON数据需要修改content type:

xhttp.setRequestHeader("Content-type", "application/json; charset=utf-8");

作业

根据Ajax动态加载导航栏下的“新消息”

分别通过iframe和Ajax完成侧边栏关键字“换一批”的功能

能通过Json获得(有无未读消息的)数据,决定是否闪烁铃铛图标(注意:要能闪还能不闪)

发布求助时,能够

根据一级关键字,通过Ajax获取到该一级关键字下的二级关键字,并予以显示

定向求助时移出焦点,就能找到相关用户

刷新帮帮币

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Decompose Conditional(分解条件表达式)

有一个复杂的 if-else 语句 if (date.before(SUMMER_START) || date.after(SUMMER_END)) {charge quantity * winterRate winterServiceCharge; } else {charge quantity * summerRate; } 重构: 从if-else 中分别提炼出独立函数 if (notSummer(date)) {charge…

2018 AI 产品趋势:喧嚣的追风者和静默的收割人

来源:36氪毫无疑问,在消费科技品领域,AI产品有泡沫。故事要从2014年说起。那一年底,亚马逊低调发布了智能音箱Echo,苹果发布了第一代Apple Watch智能手表。比起AI浪潮,那个时候大家谈论更多,是智…

基于Ajax的应用程序架构汇总(三)

3 服务器端:多种语言 3.1 跨平台异步的接口工具箱(5月2005年) CPAINT:http://cpaint.sourceforge.net/,是一真正的支持PHP和ASP/Vbscript的Ajax实现和JSRS(JavaScript远程脚本)实现。CPAINT提供给你需求的代码在后台实现AJAX和JSRS&#xff0…

ftp服务器需要什么系统,ftp服务器需要什么系统

ftp服务器需要什么系统 内容精选换一换单独购买的云硬盘为数据盘,可以在云硬盘列表中看到磁盘属性为“数据盘”,磁盘状态为“可用”。此时需要将该数据盘挂载给云服务器使用。系统盘必须随云服务器一同购买,并且会自动挂载,可以在…

3D 鼠标跟随脚本详解

请大家先看右边的动画演示。这个动画就是由 jimbob 制作的,您可以到这里来下载这个动画的原始文件。下面请看他的详细解释: If Frame Is Loaded ("end")Go to and Play ("start")End Frame Loaded initalise:Comment: Comment: 初始…

重磅 | MIT启动IQ计划:研究人类智能,让全世界的机构共同合作

作者:思颖概要:当地时间 2 月 1 日,MIT 宣布启动 MIT Intelligence Quest(智能探索)计划,该项计划旨在助力人类智能的基础研究,推动能造福于社会的技术工具的发展。据悉,该项声明由 …

risc系统服务器,精简的高端 解析四大RISC服务器处理器

也许您很难相信,作为我们今天仍在广泛使用的诸如“扣肉”之类的最新双核乃至是CPU(Center Prosessing Unit中央处理器),都是基于始创在上世纪60年代的CISC指令集,距今已有四十多年了。CISC是英文“Complex Instruction Set Computer”的缩写&…

Consolidate Conditional Expression(合并条件表达式)

有一系列条件测试&#xff0c;都得到相同结果 private double disabilityAmount() {if (seniority < 2) return 0;if (monthsDisabled > 2) return 0;if (isPartTime) return 0;// ... } 重构&#xff1a;将这些条件测试合并为一个条件表达式&#xff0c;并提炼为一个独…

梅露可物语虚拟服务器,【图片】【萌新】主界面的使用方法(零基础版)【梅露可物语日服吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼那下面主要讲讲梅露可的货币们&#xff1a;1、 钻石&#xff1a;钻石的主要用途有三个。一、抽抽抽&#xff01;二、碎了这个钻来回复你的ap。三、战斗时候被人打败了有时可以用钻石复活。不过第三个基本是都不用的&#xff0c;因为…

北京发自动驾驶车辆考试大纲 难度堪比普通人考驾照

来源&#xff1a;新京报概要&#xff1a;自《加快推进自动驾驶车辆道路测试有关工作的指导意见》发布以来&#xff0c;北京进一步为自动驾驶车辆明确其性能测试与实际道路测试的“考试大纲”。自《加快推进自动驾驶车辆道路测试有关工作的指导意见》发布以来&#xff0c;北京进…

免费 Flash 留言板 -Powered by Kong

-----点击预览------新开窗口地址&#xff1a;http://iamkong.com/bord/bord.html重点*在FLASH load数据库数据&#xff0c;以及留言Post数据库这是FLASH与外面数据交互的方法之一 >点击下载{white白色}>点击下载{black 黑色}点击下载FLA源文件转载于:https://www.cnblog…

Consolidate Duplicate Conditional Fragments(合并重复的条件片段)

在条件表达式的每个分支上有相同的一段代码 if (isSpecialDeal()) {total price * 0.95;send(); } else {total price * 0.98;send(); } 重构&#xff1a;将这段重复代码搬移到条件表达式之外 if (isSpecialDeal()) {total price * 0.95; } else {total price * 0.98; }…

普华永道2030汽车产业报告 私家车真正Out了!

来源&#xff1a;智东西概要&#xff1a;随着新兴科技渗透汽车产业&#xff0c;电动化、智能化、共享化等趋势愈演愈烈。随着新兴科技渗透汽车产业&#xff0c;电动化、智能化、共享化等趋势愈演愈烈。科技企业、新造车企业杀入传统价值链&#xff0c;业界称之为汽车产业变革。…

C++学习之路 | PTA乙级—— 1001 害死人不偿命的(3n+1)猜想 (15分)(精简)

1001 害死人不偿命的(3n1)猜想 (15分) 卡拉兹(Callatz)猜想&#xff1a; 对任何一个正整数 n&#xff0c;如果它是偶数&#xff0c;那么把它砍掉一半&#xff1b;如果它是奇数&#xff0c;那么把 (3n1) 砍掉一半。这样一直反复砍下去&#xff0c;最后一定在某一步得到 n1。卡拉…

[转] TOUGH 的系列平面广告

转载于:https://www.cnblogs.com/temptation/archive/2006/08/09/471863.html

未来网络经济的99个趋势报告

来源&#xff1a; 199IT互联网数据中心概要&#xff1a;未来网络经济的99个趋势报告72%的全球CEO认为未来3年将比过去50年对其行业的影响更大&#xff1b;到2020年&#xff0c;平均每个人都会比与机器人有更多的对话&#xff1b;创新品牌的品牌价值升值比没有那么创新的品牌高9…

Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)

函数中的条件逻辑使人难以看清正常的执行路径 double getPayAmount() {double result;if (isDead) {result deadAmount();} else {if (isSeparated) {result separatedAmount();} else {if (isRetired) {result retiredAmount();} else {result normalPayAmount()}}}retur…

C++学习之路 | PTA乙级—— 1002 写出这个数 (20分)(精简)

1002 写出这个数 (20分) 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10 ​100 ​​ 。 输出格式&#xff1a; 在一行…

预感

今早出门穿鞋的时侯&#xff0c;就觉得好像有什么不对劲&#xff0c;但是没有反应过来&#xff0c;坐车的时侯才发现原来是穿错鞋了&#xff0c;本来穿凉鞋的&#xff0c;穿成了皮鞋。当时就感觉头脑不够清醒&#xff0c;可能今天要不经意的犯错。 果然&#xff0c;下午…

Hinton:人类就是机器,绝妙的机器

编译 夏乙 唐旭量子位 出品 | 公众号 QbitAI概要&#xff1a;三十多年以来&#xff0c;Geoffrey Hinton一直徘徊在人工智能研究的边缘地带。1三十多年以来&#xff0c;Geoffrey Hinton一直徘徊在人工智能研究的边缘地带。他像一个局外人一样坚守着一个简单的观点&#xff1a;计…