JavaScript Ajax实现异步通信


Posted in Javascript onDecember 14, 2016

JavaScript Ajax实现异步通信

一、浏览器与服务器的同步和异步通信

1.同步:是阻塞的,浏览器在向服务器发送请求之后一直等待服务器的响应,而没有做其他事情。
2.异步:非阻塞的,浏览器向服务器发送请求之后,继续执行其他代码,知道服务器响应,浏览器中断当前的任务,处理服务器响应。

二、没有Ajax之前浏览器是通过iframe来实现异步刷新

1.iframe标签:iframe标签通过src连接到一个页面,其实就是将需要实现异步刷新的内容使用
iframe标签包裹,

A.对iframe实现整个页面刷新,其实是通过刷新一个页面的子页面来实现异步刷新;

a.主页面代码:

<div>通过实现子页面刷新来实现异步刷新</div>
<iframe src="../testphp/data.php" frameborder="0"></iframe>

b.php页面代码:

<?php
  echo 1;
?>

B.通过在刷新子页面的同时在子页面做一些操作来访问父页面元素并且修改该元素的内容

a.主页面代码:

<div id="refreshTarget"></div>
<form action="../php/data.php" method="post" target="targetIframe">
<input type="submit" value="提交">
</form>
<iframe name="targetIframe" frameborder="0">iframe</iframe>

b.php页面代码:

<?php
  echo 1;
?>
<script type="text/javascript">
  parent.document.querySelector('#refreshTarget').innerHTML = '刷新成功';
</script>

三、Ajax实现异步刷新

1.使用get方法来发送请求:

/**
 * 使用ajax get方式来验证用户名密码是否正确
 * 1.区别于表单,我们需要自己拼接查询字符串,不是表单提交,可
 * 以不为表单添加name属性
 * 2.将数据放在查询字符串中传到请求的页面,然后页面获得数据进
 * 行操作,然后对前端返回响应数据,解析数据,刷新
 */
var submit = document.querySelector('#submit');
submit.onclick = function(){
  var nameValue = document.querySelector('#username').value;
  var passValue = document.querySelector('#password').value;
  var target = document.querySelector('#refreshTarget');
  /* 实例化XMLHttpResquest*/
  var xhr = new XMLHttpRequest();

  /* 监控xhr对象的状态,只要xhr.readyState值改变就会触发事件由alert弹出框的值可以知道
    a.以下xhr.readyState值为4的时候表示请求响应结束,数据接收完毕并且可以使用
    b.xhr.status值为200表示请求成功
  */
  xhr.onreadystatechange = function() {
    alert(1);
    if(xhr.readyState == 4) {
      if(xhr.status == 200){
        var data = xhr.responseText;
        if(data == 1) {
          target.innerHTML = '验证成功';
        }else if(data == 2) {
          target.innerHTML = '验证失败';
        }
      }
    }
  }

  /* 打开请求*/
  var url = '../testphp/inspector.php?username='+nameValue + '&password='+ 
  passValue;

  xhr.open('get',url,true); // xhr.readyState = 1;

  /* 发送请求*/
  xhr.send(null); // xhr.readyState = 2;
  alert(2);
}

2.使用post方法来发送请求:

/**
 * 使用ajax post方式来验证用户名密码是否正确
 * 1.区别于表单,我们需要自己拼接查询字符串,不是表单提交,可
 * 以不为表单添加name属性
 * 2.将数据放在查询字符串中传到请求的页面,然后页面获得数据进
 * 行操作,然后对前端返回响应数据,解析数据,刷新
 * 3.区别于ajax,get方法就是数据是放在send发送不是添加到查询字符串
 */
var submit = document.querySelector('#submit');
submit.onclick = function(){
  var nameValue = document.querySelector('#username').value;
  var passValue = document.querySelector('#password').value;
  var target = document.querySelector('#refreshTarget');
  /* 实例化XMLHttpResquest*/
  var xhr = new XMLHttpRequest();

  /* 监控xhr对象的状态,只要xhr.readyState值改变就会触发事件由alert弹出框的值可以知道
    a.以下xhr.readyState值为4的时候表示请求响应结束,数据接收完毕并且可以使用
    b.xhr.status值为200表示请求成功
  */
  xhr.onreadystatechange = function() {
    alert(1);
    if(xhr.readyState == 4) {
      if(xhr.status == 200){
        var data = xhr.responseText;
        if(data == 1) {
          target.innerHTML = '验证成功';
        }else if(data == 2) {
          target.innerHTML = '验证失败';
        }
      }
    }
  }

  /* 打开请求*/
  var url = '../testphp/inspector.php?';

  xhr.open('post',url,true); // xhr.readyState = 1;

  /* 修改请求头模拟from表单的post提交,
  a.设置Content-type可以使得在php页面中$_POST[‘key']的方式来获取对应的值,不然的话必
  须在$HTTP_RAW_POST_DATA对象中获取
  b.设置'Content-type'既是使用类似表单方式提交数据,所以一下必须对send发送的数据序列
  化为‘name=name&value=value'的形式*/
  xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');

  var data = 'username='+nameValue+'&password='+passValue;

  /* 发送请求*/
  xhr.send(data); // xhr.readyState = 2;
}

请求的php页面代码

<?php
/* 设置响应数据的内容格式,和字符集*/
header('Content-type:text/html;charset=utf-8');

/*使用表单的post请求php页面中可以通过$_POST来获取*/
$username = $_POST['username'];
$password = $_POST['password'];

if($username == 'admin' && $password == '123'){
  echo 1;
}else{
  echo 2;
}

?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 数组操作代码集锦
Apr 28 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
Apr 27 Javascript
JavaScript 判断日期格式是否正确的实现代码
Jul 04 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
javascript用函数实现对象的方法
May 14 Javascript
jQuery中 delegate使用的问题
Jul 03 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
Sep 13 Javascript
前端分页功能的实现以及原理(jQuery)
Jan 22 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
three.js实现3D视野缩放效果
Nov 16 Javascript
解决webpack多页面内存溢出的方法示例
Oct 08 Javascript
JavaScript实现多球运动效果
Sep 07 Javascript
微信小程序 配置文件详细介绍
Dec 14 #Javascript
微信小程序 闭包写法详细介绍
Dec 14 #Javascript
微信小程序 wx.uploadFile无法上传解决办法
Dec 14 #Javascript
bootstrap日历插件datetimepicker使用方法
Dec 14 #Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 #Javascript
实例解析Array和String方法
Dec 14 #Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 #Javascript
You might like
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
php数组一对一替换实现代码
2012/08/31 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
JS实现骰子3D旋转效果
2019/10/24 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
基于Python的文件类型和字符串详解
2017/12/21 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
Python实现手绘图效果实例分享
2020/07/22 Python
Python collections模块的使用方法
2020/10/09 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
资产经营总监岗位职责范文
2013/12/01 职场文书
军训的自我鉴定
2013/12/10 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
工作表现评语
2014/01/19 职场文书
个人收入证明格式
2015/06/24 职场文书
安全教育主题班会教案
2015/08/12 职场文书
高一语文教学反思
2016/02/16 职场文书