先看几种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相关推荐

  1. 零基础AJAX入门(含Demo演示源文件)

    零基础AJAX入门(含Demo演示源文件) 作者:一点一滴的Beer  个人主页:http://www.cnblogs.com/beer 摘要:因为笔者的大四毕业设计是做WebGIS系统,用过Web版 ...

  2. [转]掌握Ajax 第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 [IBM]

    转自:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步 ...

  3. JavaScript基础一

    1.1 javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) J ...

  4. Web前端-JavaScript基础教程上

    Web前端-JavaScript基础教程 将放入菜单栏中,便于阅读! JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript ...

  5. JavaScript基础---语言基础(1)

    写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...

  6. JavaScript中ajax如何不刷新,JavaScript基于Ajax实现不刷新在网页上动态显示文件内容...

    本文实例讲述了JavaScript基于Ajax实现不刷新在网页上动态显示文件内容的方法.分享给大家供大家参考.具体如下: 下面的JS代码是一个最基础的JS的ajax实现,可以动态显示服务器上的文件aj ...

  7. JavaScript、Ajax与jQuery的关系

    简单总结: 1.JS是一门前端语言. 2.Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新. 3.jQuery是一个框架,它对JS进行了封装 ...

  8. 第五模块·WEB开发基础-第2章JavaScript基础

    第1章 JavaScript基础 01-JavaScript历史介绍 02-JavaScript的组成 03-JavaScript的引入方式 04-变量的使用 05-基本数据类型(一) 06-基本数据 ...

  9. 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求

    转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...

最新文章

  1. [心得分享] 我在 GitHub 上学习开源
  2. sc delete:指定的服务已经标记为删除
  3. 【Python基础】Matplotlib官方小抄手册公开(配套可视化代码)!
  4. C#泛型列表List实现二维数组的功能(令附C#泛型列表List基本用法总结)
  5. 2017-3-10 SQL server 数据库 T--SQL语句
  6. 解决: Your ApplicationContext is unlikely to start due to a @ComponentScan of the default
  7. matlab中asix off_MATLAB试卷+答案
  8. 用随机过程进行系统识别
  9. 文字转语音怎么在线生成MP3格式的音频?
  10. diabetes影响因子2017_2017年度影响因子看点和预测(MedSci出品)
  11. Java调用Gdal写Esri ShapeFile文件工具类
  12. 飞鸽传书2007绿色版还需要遵循些基本的原则
  13. 魔兽世界暴雪隐藏密集
  14. 如何写好一个综述,以一个综述为例
  15. ArcMap打不开ENVI的img格式问题解决
  16. 关于Linux系统之VM安装配置
  17. 仪器数据自动化采集,助力提升实验室管理效率
  18. 【GCC编译优化系列】究竟什么样的代码会导致函数调用的栈溢出呢?
  19. 《算法导论3rd第二十五章》所有结点对的最短路径问题
  20. python百度网盘API分片上传实现,纯代码

热门文章

  1. 《mysql 必知必会》 笔记(五)
  2. win8解决“telnet不是内部或外部命令”问题
  3. jQuery中的$.grep()方法的使用
  4. 技术人生:希望有生之年开发一个“自己的解释语言”
  5. 2011年计算机二级c++笔记:类的转换
  6. BIEE配置多个实例(BIEE Multiple Instance)
  7. 【Spark工作原理】Spark任务调度理解
  8. .NetCore Session.Redis
  9. 软件变更控制 - 控制成本溢出
  10. Android开发学习之路-机器学习库(图像识别)、百度翻译