《AJax - Async Javascript and xml - 异步的JavaScript和XML》

一、基础认识

AJax技术的目的:实现页面无刷新数据动态更改

优点: 

  + 不需要插件支持

  + 提供WEB程序的功能

  + 优秀的用户体验

  + 减轻服务器带宽的负担

缺点:

  + 破坏浏览器的前进与后退

  + 搜索引擎SEO的支持性不好

二、代码示例

学习后编写的一个很基础的Ajax函数,帮助自己更好的掌握Ajax

  1. /*
  2. * method => Ajax请求所采用的方法,GET或POST
  3. * URL => 所要请求页面的URL
  4. * paras=> 发送时附加的参数
  5. * callback => 完成请求或页面数据准备完毕时执行的方法
  6. */
  7.  
  8. function Ajax(method,url,paras,callback){
  9.  
  10. function getXMLHttpReq(){
  11. var XMLHttpReq = null;
  12. if(window.XMLHttpRequest){
  13. XMLHttpReq = new XMLHttpRequest();
  14. }else if(window.ActiveXObject){
  15. XMLHttpReq = new ActiveXObject('Microsoft.XMLHTTP');
  16. }
  17. return XMLHttpReq;
  18. }
  19. xhr = getXMLHttpReq();
  20.  
  21. if(method ==='POST'){
  22. xhr.open('POST',url,true);
  23. xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  24. if(paras!=''){
  25. xhr.send(paras);
  26. }else{
  27. xhr.send(null);
  28. }
  29. }else{
  30. if(paras!=''){
  31. url = encodeURI(url+'?'+paras);
  32. }
  33. xhr.open('GET',url,true);
  34. xhr.send(null);
  35. }
  36.  
  37. xhr.onreadystatechange=function(){
  38. if(xhr.readyState==4&&xhr.status==200){
  39. callback();
  40. }
  41. }
  42. }
  43.  
  44. //调用方法
  45. function Ajax1(){
  46. Ajax('GET','test.php','',function(){
  47. document.getElementById('responseText').innerHTML = xhr.responseText;
  48. })
  49. }

· 代码说明:

  1. ActiveXObject // 利用ActiveX插件可以与微软的其它组件进行交换,包括这里我需要的微软自带的HTTP请求方法。
  2.  
  3. new ActiveXObjcet('Microsoft.XMLHTTP') // IE5/6支持的HTTP请求方法
  1. xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  2. //如果Ajax请求是通过POST方式,那么为了方便后台通过键值对的形式获取数据,可以指定数据的发送以表单的形式。
  1. open('GET','index.php?a=1&b=2',true) //GET方式,通过在URL附加参数进行数据的传输。
  2.  
  3. XMLHttpReq.send(pars) //POST方式的数据发送
  1. url = encodeURI(url+'?'+pars);
  2. //为了解决IE6/7在GET方式下传输中文参数出现乱码的情况,会在参数传输之前利用JS进行URL编码。
  3.  
  4. echo urldecode($_GET['a'])
  5. // 客户端进行编码,服务端进行解码

· 重点讲解:

  1. readyState && status

   readyState表示HTTP请求的运行状态,不论请求的数据是否找到,都会经历以下的过程:

    0 ----  请求未初始化

    1 ----  与服务器建立连接

    2 ---- 请求已经接收

3 ---- 请求正在处理

   status 则表示了HTTP所请求数据的状态[常见的反馈码]:

    200 ---- 数据请求完成,已经可以使用。

    404 ---- 页面未找到。

  2. open()

    功能:初始化请求的参数。

    格式:open('请求数据的方式','所要请求的页面URL','是否异步');

    格式说明:

         · 请求数据的方式:GET | POST

         ·  是否异步:true(异步) | false(同步)

    * 如果存在setRequestHeader()方法,一定要把open()方法放在它之前的一行。

  3. send()

    功能:发送请求。

    格式:send(paras)

    代码示例:

  1. send(null)
  2.  
  3. //在GET方式下用这种方式,因为参数会附加在URL后进行传输。
  4.  
  5. send('fname=神&lname=经病')
  6.  
  7. //在POST方式,用这种方式传输参数,但要记得使用setRequestHeader()方法

  

  4. 同步与异步

    xmlHttpReq对象的open()方法第三个参数可以设置同步或异步的方式。

    true - 表示为异步,它不会等待服务器的执行完成。

    false - 表示同步,它会等待服务器执行完成,否则便会挂起程序,一直等待,一般不推荐是用同步的方式,不过对于一些小程序还是可以使用的。

  

  5.  setRequestHeader()

     该方法可以设置请求的头部信息,常用以post方式向一个动态网页文件提交数据时使用。这

    是因为PHP中的$_POST['key']方法,需要用到键值对的格式,因此必须声明请求的类型为: setRequestHeader('Content-Type','application/x-www-form-urlencoded') 以表单提交数据的方式来发送数据到服务器。

    

  6. 使用时间戳或随机数来确保无缓存的请求数据

    

  1. //时间戳
  2. open('GET','index.php?t='+ new Date()*1,true)
  3.  
  4. //随机数
  5. open('GET','index.php?m='+ Math.random(),true)

Ajax 学习 - 基础学习的更多相关文章

  1. Redis学习---基础学习[all]

    什么是NoSQL型数据库 NoSQL数据库---NoSQL数据库的分类 Redis学习---NoSQL和SQL的区别及使用场景 Redis学习---负载均衡的原理.分类.实现架构,以及使用场景 什么是 ...

  2. Ajax全面基础学习(二)

    两种配置ajax的方式 $.ajax('url',{ 配置ajax}); $.ajax({ url : 'url' 其他ajax配置}) ajax的回调函数 $.ajax('url',{ //请求成功 ...

  3. Ajax全面基础学习(一)

    快捷方法: $.get(url,[data],[callback],[type])get方法的[data]将被链在url后面[callback]是请求成功后的回调,可以得到响应数据,如果请求失败,看不 ...

  4. Android开发学习——基础学习

    在微信公众号上,发现一个自学android的一个文章,觉得不错.对其进行小小总结,整理给大家. 1. 基础UI学习 Button/TextView/EditText/CheckBox/ImageVie ...

  5. java 学习基础学习单词及java关键词

    在JAVA学习中我们难免会犯一些逻辑错误,语法错误,和一些运行错误,对于英语不好的人,就的记下下面的2常用单词,有助于我们提高在使用软件编写代码的速度和代码调试,能更便捷的找出错误,知道1中的保溜关键 ...

  6. ajax基础学习

    AJAX即"Asynchronous JavaScript and XML",意思是异步JavaScript和XML,是指一种创建交互式网页的网页开发技术. 虽然现在很少有人去自己 ...

  7. 【Ajax 基础学习】

    http://www.cnblogs.com/guduoduo/p/3681296.html 今天简单的学习了 Ajax 的基础知识,总结在这里.部分代码不是原创,特此说明. [Ajax 简介] AJ ...

  8. 【转】Ajax 基础学习

    今天简单的学习了 Ajax 的基础知识,总结在这里.部分代码不是原创,特此说明. [Ajax 简介] AJAX = Asynchronous JavaScript and XML(异步的 JavaSc ...

  9. ASP.NET MVC基础学习

    ASP.NET MVC基础学习 传统的MVC概念 模型:组类,描述了要处理的数据以及修改和操作数据的业务规则 视图:定义应用程序用户界面的显示方式 控制器:一组类,用来处理来自用户,整个应用程序流以及 ...

随机推荐

  1. WPF版的权限管理系统

    好多技术人员都有一个通病,不关注用户的需求,产品的可用性,只看使用的技术的新不新,潮不潮,这就是所谓的技术发烧友. 这段时间,断断续续的开发一个WPF的软件,也拿出来Show一下.要不放在硬盘里就发霉 ...

  2. html5 postMessage解决跨域、跨窗口消息传递

    一些麻烦事儿 平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 1.页面和其打开的新窗口的数据传递 2.多窗口之间消息传递 3.页面与嵌套的iframe消息传递 4. ...

  3. 一则线上MySql连接异常的排查过程

    Mysql作为一个常用数据库,在互联网系统应用很多.有些故障是其自身的bug,有些则不是,这里以前段时间遇到的问题举例. 问题 当时遇到的症状是这样的,我们的应用在线上测试环境,JMeter测试过程中 ...

  4. Model模型和Module模块的区别

    资料是从网上找的,具体是谁最先写的,不清楚了. Model通常是指模型.这个模型也许是你需求分析出来的, 也许是你算法做出来的. 不过最大可能是MVC的网站,或者是GUI开发模式中的M里的那个模型. ...

  5. 手把手教你搭建SpringMVC——最小化配置

    为什么需要Spring MVC 最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面. 随着网站开发的深入,开始学习servlet开发,记得最痛苦的就是se ...

  6. 更新日志 - fir.im「高级统计」功能上线

    距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...

  7. SpringMVC与mybatis整合

    一.逆向工程生成基础信息 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generator ...

  8. SVN命令模式批量更新多个项目

    使用svn作为版本管理是,在一个仓库下边同时建立多个项目,每天上班都需要一个个更新,为了发挥程序员懒的精神,能让电脑做的,绝不手工操作.作为自动化处理,在windows环境,首先想到了bat Tort ...

  9. 每天一个linux命令(61):vi命令 /企业常用的linux命令清单

    vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是一般模式.编辑模式与指令列命令模式. 这三种模式的作用分别是: 一般模式:以 vi 打开一个档案就直接进入一般模式了(这是默认的模式) ...

  10. apache多站点配置

    apache多站点配置 临时需要个测试站,然后就到apache中配置vhosts,结果这货总是显示"拒绝了你的请求",找半天发现居然还要添加端口监听 vhosts.conf 添加v ...