使用ajax编写异步查询

前几天,自己用ajax将前端的查询页面重新写了一下,使用异步查询来操作。
服务器端使用的是PHP

var xhr;
 if (window.XMLHttpRequest){// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
 xhr=new XMLHttpRequest();
 }
 else{// IE6, IE5 浏览器执行代码
 xhr=new ActiveXObject("Microsoft.XMLHTTP");}

首先建立一个XMLHttpRequest对象,这里有一个兼容性的处理。之前就被ie的兼容问题坑过。。

xhr.onreadystatechange = function(){
                      if(xhr.readyState==4&&((xhr.status>=200&& xhr.status<300) || xhr.status==304)&&xhr.responseText.slice(0,4)!='null'){
                                          showmeeting(xhr.responseText);
                            }
                            elseif(xhr.readyState==4&&xhr.status!=200){alert('请求失败:'+xhr.status);}
                     }

为onreadystatechange事件添加一个函数,每一次readyState发生变化,都会触发一次onreadystatechange事件,当readyState=4且status=200时,就表示异步请求已经成功的接收了服务器返回来的所有结果。

var cdate = document.getElementById("date").value;
xhr.open('get','m.php?date='+cdate,true);
xhr.send();

这里是使用GET方法来传递数据,我一开始是使用POST方法的。但是不知道为什么服务器端$_POST一直获取不了值,最后耗了好久作罢。使用GET就一下子就成功了。这里也贴出POST方法,请大神可以帮忙看看问题在哪

\\post方法
xhr.open('post','m.php',true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send('date='+cdate);

使用ajax有哪些好处呢

  1. 前后端分离
    在之前是使用php编写的文件,有一堆混在一起的编码,需要由php输出成为JavaScript,不方便查看和修改。现在前端页面的代码可以完全不考虑后端逻辑,只需要接收后端返回数据然后进行处理即可。
  2. 维护工作简化
    之前查询结果的页面有两个,所以页面样式有所变动的话就需要同时更改两个文件,维护相对麻烦,现在在查询逻辑不变的情况下只需要维护一个首页文件即可。
  3. 加载速度提高
    第一次打开页面的速度并没有多少变化,但是后面再次点击查询的时候只需获取后端返回的数据文件即可,所需文件大小相对之下要远小于重新加载一整个页面的大小。

来看看时间上的对比
正常查询
正常查询
使用ajax
使用ajax

正常查询按照我原来的代码,是需要刷新一整个网页的,总的大小是43.8K,耗时180ms。使用ajax只需要接收服务器端返回的数据大小,这个文件的大小是427B,耗时只需10ms!是刷新整个网页的1/18!

但是也有缺点

  1. 浏览器自带的“后退”功能对于在页面中进行的异步操作完全没有效果,因为这种“后退”是只能是后退到上一个静态的页面。
    浏览器中自带的“前进”、“后退”对于使用ajax操作无效
    浏览器中自带的“前进”、“后退”对于使用ajax操作无效
  2. 在php中可以直接使用echo将变量值直接变成字符串的形式,可以直接输出一个静态的网页。现在使用ajax进行前后端分离之后需要使用‘data-’属性来将对应的信息“存储”在div标签中。这个主要是JavaScript的变量的时效性问题。

原来

echo  " document.getElementById(\"name\").value= ' ".$value['name']." ' ";  //直接赋值

输出网页会变成

document.getElementById("name").value='张三';  

现在

element.setAttribute('data-name',jsonData[i].name);  //存储值

document.getElementById("name").value=this.getAttribute('data-name);  //使用值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值