javascript基础-ajax
先看几种B/S交互的对比
B/S方式 | 阻塞页面 | 历史记录 | 协议 |
URL: get | —— |
自动记录 浏览器前进后退可访问 |
http/https |
form: get/post | 完全阻塞 |
自动记录 浏览器前进后退可访问 |
http/https |
ajax: get/post |
同步阻塞 异步不阻塞 |
HTML5才支持无刷新改变页面URL | http/https |
ajax异步请求时不阻塞页面,不影响用户的持续操作。这是ajax流行的原因。
XHR
XHR是AJAX的核心,写一个原生的ajax请求
var xhr = new XMLHttpRequest();//创建XHR实例xhr.open('get','queNames.do', false);//启动请求。args[0]请求方式 args[1] URL args[2] asyncxhr.send(null);//发送请求if((xhr.status >= 200 && xhr.status <300) || xhr.status == 304){ //请求成功cnosole.info(xhr.responseText);//拿到响应数据}
xhr.abort()//中断请求
HTTP协议
ajax通过HTTP协议来完成交互,需要知道基本的HTTP协议知识
跨域
因为同源策略(ip,端口,域名)的限制,ajax不支持跨域访问,但项目中经常碰到跨域的需求
几种跨域的对比
跨域方式 | 请求方法 | 需改造后台 | 缺陷 |
jsonp | get | 是 | 无法携带凭证过去 |
img | get | 否 | 单向传递,不能获取响应 |
CORS | get/post | 是 | 完美! |
常用的这三种。其他更偏门的swf、父子iframe跨域这里不做讨论。CORS协议跨域,在IE8-不支持。标准浏览器均支持。
jsonp
原理
利用<script>标签。src里设置请求URL+callbackName。 callbackName即全局函数名。后台在输出流时调用此函数。
写法
前端(以jquery举例)
$.ajax({url:"...", dataType:'jsonp', jsonp:'callback', success: function(data) {}... });
后台
PrintWriter writer = null;try{writer=response.getWriter();String callback= request.getParameter("callback");response.setContentType("application/javascript;charset=UTF-8");writer.write(callback+ "(" + data + ")");//调用客户端的全局函数,塞入数据datawriter.flush();return null; }catch(IOException e) {logger.error(e.toString());}
img
var img = newImage(); img.onload= img.onerror =function() {alert("Done!"); }; img.src= "http://www.suning.com/a.do?name=value";
CORS
我在这篇博文附了写法
安全
ajax容易遭到CSRF攻击,两种方式来防范:1,敏感信息如密码用SSL连接 2,携带随机数
点击此博文进一步理解
调试
打开chrome浏览器,按F12
Advanced Ajax 介绍
类型 | 描述 | 原理 | 适合场景 |
Comet(服务器推送) | 服务器向页面推送数据的技术,目的是保证数据的实时更新。Ajax是页面向服务器请求数据。Comet则是服务器向页面推送数据。两者相反。 |
短轮询:不断发请求 长轮询: 客户端请求-->服务器挂起,直到有数据响应-->客户端再请求 HTTP流: |
适合股票,互联网抢拍等需要实时同步的场景 |
SSE | 只读Comet |
服务器响应特定的MIME类型(text/event-stream)来保证数据传递给EventSource 自动断开重连。 通过事件open/close/error来控制连接 断开时,通过ID来保证数据顺序。 |
不需要传递数据给服务器的同步场景 |
Web Socket | WebSocket的目标是在一个持久连接上提供双向通信 |
WebSocket协议 ws:// 依赖专门的服务器 |
Web QQ或聊天室 |
Comet
短轮询: 前端:setInterval($.ajax..,2000) 后台:——长轮询: 前端:$ajax-reponse-$ajax请求..响应--请求..响应--... 后台: 数据未更新之前不关闭连接HTTP流: 前端: xhr.onreadystatechange监听-->readyState==3时渲染数据 后端:开启线程监听,不关闭连接,有数据时输出,刷新缓存。
SSE
var source = new EventSource(url);//创建SSE source.onmessage = function(data){};//收到消息时 source.onerror = function(e){};//连接错误时 source.close();//关闭连接
Web Socket
var socket = new WebSocket('ws://localhost:8080'); //创建一个Socket实例socket.onopen = function(event) { //打开socket socket.send('suning!'); //发送消息给服务器 socket.onmessage= function(event) { //监听服务器消息的返回console.info('message',event);};socket.onclose= function(event) { //监听关闭 };socket.close();//关闭Socket}
点击此博文进一步理解
转载于:https://www.cnblogs.com/mominger/p/3924105.html
javascript基础-ajax相关推荐
- 零基础AJAX入门(含Demo演示源文件)
零基础AJAX入门(含Demo演示源文件) 作者:一点一滴的Beer 个人主页:http://www.cnblogs.com/beer 摘要:因为笔者的大四毕业设计是做WebGIS系统,用过Web版 ...
- [转]掌握Ajax 第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 [IBM]
转自:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步 ...
- JavaScript基础一
1.1 javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) J ...
- Web前端-JavaScript基础教程上
Web前端-JavaScript基础教程 将放入菜单栏中,便于阅读! JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript ...
- JavaScript基础---语言基础(1)
写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...
- JavaScript中ajax如何不刷新,JavaScript基于Ajax实现不刷新在网页上动态显示文件内容...
本文实例讲述了JavaScript基于Ajax实现不刷新在网页上动态显示文件内容的方法.分享给大家供大家参考.具体如下: 下面的JS代码是一个最基础的JS的ajax实现,可以动态显示服务器上的文件aj ...
- JavaScript、Ajax与jQuery的关系
简单总结: 1.JS是一门前端语言. 2.Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新. 3.jQuery是一个框架,它对JS进行了封装 ...
- 第五模块·WEB开发基础-第2章JavaScript基础
第1章 JavaScript基础 01-JavaScript历史介绍 02-JavaScript的组成 03-JavaScript的引入方式 04-变量的使用 05-基本数据类型(一) 06-基本数据 ...
- 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...
最新文章
- [心得分享] 我在 GitHub 上学习开源
- sc delete:指定的服务已经标记为删除
- 【Python基础】Matplotlib官方小抄手册公开(配套可视化代码)!
- C#泛型列表List实现二维数组的功能(令附C#泛型列表List基本用法总结)
- 2017-3-10 SQL server 数据库 T--SQL语句
- 解决: Your ApplicationContext is unlikely to start due to a @ComponentScan of the default
- matlab中asix off_MATLAB试卷+答案
- 用随机过程进行系统识别
- 文字转语音怎么在线生成MP3格式的音频?
- diabetes影响因子2017_2017年度影响因子看点和预测(MedSci出品)
- Java调用Gdal写Esri ShapeFile文件工具类
- 飞鸽传书2007绿色版还需要遵循些基本的原则
- 魔兽世界暴雪隐藏密集
- 如何写好一个综述,以一个综述为例
- ArcMap打不开ENVI的img格式问题解决
- 关于Linux系统之VM安装配置
- 仪器数据自动化采集,助力提升实验室管理效率
- 【GCC编译优化系列】究竟什么样的代码会导致函数调用的栈溢出呢?
- 《算法导论3rd第二十五章》所有结点对的最短路径问题
- python百度网盘API分片上传实现,纯代码
热门文章
- 《mysql 必知必会》 笔记(五)
- win8解决“telnet不是内部或外部命令”问题
- jQuery中的$.grep()方法的使用
- 技术人生:希望有生之年开发一个“自己的解释语言”
- 2011年计算机二级c++笔记:类的转换
- BIEE配置多个实例(BIEE Multiple Instance)
- 【Spark工作原理】Spark任务调度理解
- .NetCore Session.Redis
- 软件变更控制 - 控制成本溢出
- Android开发学习之路-机器学习库(图像识别)、百度翻译