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 相关文章推荐
javascript TextArea动态显示剩余字符
Oct 22 Javascript
javascript JSON操作入门实例
Apr 16 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
js动态控制table的tr、td增加及删除的具体实现
Apr 30 Javascript
简介JavaScript中的setHours()方法的使用
Jun 11 Javascript
javascript下拉列表菜单的实现方法
Nov 18 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
Apr 11 jQuery
angular中实现控制器之间传递参数的方式
Apr 24 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
axios如何利用promise无痛刷新token的实现方法
Aug 27 Javascript
vue各种事件监听实例(小结)
Jun 24 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去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
海量经典的jQuery插件集合
2010/01/12 Javascript
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
详解Django中间件执行顺序
2018/07/16 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
通过实例解析python and和or使用方法
2020/11/14 Python
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
办公室前台岗位职责
2014/01/04 职场文书
客服部工作职责范本
2014/02/14 职场文书
金融与证券专业求职信
2014/06/22 职场文书
销售活动策划方案
2014/08/26 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
2014年团工作总结
2014/11/27 职场文书
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS