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 特殊字符
Apr 05 Javascript
Dom与浏览器兼容性说明
Oct 25 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
jQuery使用ajaxSubmit()提交表单示例
Apr 04 Javascript
JavaScript中的无阻塞加载性能优化方案
Oct 10 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
JS模拟超市简易收银台小程序代码解析
Aug 18 Javascript
微信小程序页面滚动到指定位置代码实例
Sep 07 Javascript
JavaScript实现左右滚动电影画布
Feb 06 Javascript
react 生命周期实例分析
May 18 Javascript
javascript canvas实现雨滴效果
Jun 09 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 feof用来识别文件末尾字符的方法
2010/08/01 PHP
PHP实现事件机制的方法
2015/07/10 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
用一段js程序来实现动画功能
2007/03/06 Javascript
js 匿名调用实现代码
2009/06/19 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
node.js如何操作MySQL数据库
2020/10/29 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
python ddt实现数据驱动
2018/03/14 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
python安装本地whl的实例步骤
2019/10/12 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
社区工作者感言
2014/03/02 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
市级三好学生评语
2014/12/29 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
配置nginx 重定向到系统维护页面
2021/06/08 Servers