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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

免费 Flash 留言板 -Powered by Kong

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

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

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

[转] TOUGH 的系列平面广告

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

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

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

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

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

装修相片(第50天拍,全部,25号更新)

装修相片(第50天拍,全部,25号更新) 好不容易,找了个时间和相机,去把房子照了下来,因为准备要搬家了,怕搬家后乱乱的,没有了效果.1.厨房:厨柜700元/米,方太抽油烟机11902.客卧:3.主卧,富得宝,整套3480元.5.书房,书架(双虎),2300元.6.餐厅:7.沙发:3700元,这个一直觉得贵了.8.电视…

不止Alexa和AWS,揭秘亚马逊人工智能发展史

来源:腾讯科技编译:昱烨亚马逊上周四公布了2017年第四季度财报,盈利接近20亿美元,创下历史纪录。Alexa语音助手和AWS云计算服务是亚马逊业绩的亮点。《连线》杂志近日刊文,介绍了深度学习技术如何赋能Alexa和AWS&#…

Separate Query from Modifier(分离查询和修改)

某个函数既返回对象状态值,又修改对象状态 重构:建立两个不同的函数,其中一个负责查询,另一个负责修改 动机 如果某个函数只是向你提供一个值,没有任何看得到的副作用,那么这是个很有价值的东西。 你可以任…

python实现地牢迷宫生成

python实现地牢迷宫生成基本属性生成房间生成墙壁生成门口生成通道基本属性 定义当前地牢的等级,地图长宽,房间数量,房间的最小最大长度,如下 class Map:def __init__(self):self.width 30self.heigh 30self.level 1self.roo…

Parameterize Method(令函数携带参数)

若干函数做了类似的工作,但在函数体中却包含了不同的值 重构:建立单一函数,以参数表达那些不同的值。

「谷歌大脑」提出通过对长序列进行摘要提取,AI可自动生成「维基百科」

原文来源:arXiv作者:Peter J. Liu、Mohammad Saleh、Etienne Pot、Ben Goodrich、Ryan Sepassi、Łukasz Kaiser、Noam Shazeer「雷克世界」编译:嗯~阿童木呀最近,经过研究证明,生成英文维基百科(English W…

redis基本用法学习(C#调用CSRedisCore操作redis)

除了NRedisStack包,csredis也是常用的redis操作模块(从EasyCaching提供的常用redis操作包来看,CSRedis、freeredis、StackExchange.Redis应该都属于常用redis操作模块),本文学习使用C#调用CSRedis包操作redis的基本方式…

简明Python教程学习笔记_3_模块

模块 如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块。模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。 pyt…

python: 使用socket实现局域网不同主机通信。解决ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

目录1 socket的使用1.1 TCP方法1.2 UDP方法2 局域网内连接2.1总结1 socket的使用 1.1 TCP方法 在socket中使用socket.socket建立会话,如果是服务器,需要绑定服务器地址和端口号,然后进行循环监听,当有客户端连接时再接收数据。 …

德勤:2018年科技、传媒和电信行业未来趋势预测

来源:亿欧近日,德勤发布了《2018科技、传媒和电信行业预测》报告,对世界与中国的科技、传媒和电信行业在未来1-5年的趋势进行了预测。该报告通过与世界各国行业主管和评论家的数百场访谈及对世界各地数万名消费者进行的调查,分析了…

python: SHA256算法的实现和消息的哈希散列值计算

目录1 SHA2562 实现原理2.1 消息预处理2.2 使用的常量和循环移位函数2.3 主循环3 结果4 对中文编码1 SHA256 SHA256是SHA-2下的一个子算法,与之类似的还有SHA224、SHA384、SHA512,算法原理基本一致。 哈希算法通过对消息进行计算,生成一定长…