异步与同步

这就是生活中的同步

    在JavaScript语言中,同步和异步的概念刚好相反。
 
    这JavaScript中同步就是:你不执行完上面的代码,那么下面的代码你就别执行;一步一步执行,这就是同步。
 
    异步就是可以一起执行的代码;

进程的概念

 
    进程 != 程序
    
    线程
 
    程序从开始到结束的一次执行过程叫做进程
 
    一个进程当中,程序同时运行的多个分支,叫做线程
 
    多线程异步执行,可以提高程序的效率

ajax的概念

ajax是前后端数据交互的重要手段
 
Ajax 全称为:“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),它并不是 JavaScript 的一种单一技术,而是利用了一系列交互式网页应用相关的技术所形成的结合体。使用Ajax,我们可以无刷新状态更新页面,并且实现异步提交,提升了用户体验。
 
Ajax 这个概念是由 JesseJamesGarrett 在 2005 年发明的。它本身不是单一技术,是一串技术的集合,主要有:
 
    1.JavaScript,通过用户或其他与浏览器相关事件捕获交互行为
 
    2.XMLHttpRequest 对象,通过这个对象可以在不中断其它浏览器任务的情况下向服务器发送请求;
 
    3.服务器上的文件,以 XML、HTML 或 JSON 格式保存文本数据;
 
    4.其它 JavaScript,解释来自服务器的数据(比如 PHP 从 MySQL 获取的数据)并将其呈现到页面上。
 
 
由于 Ajax 包含众多特性,优势与不足也非常明显。优势主要以下几点:
    1.不需要插件支持(一般浏览器且默认开启 JavaScript 即可);
    2.用户体验极佳(不刷新页面即可获取可更新的数据);
    3.提升 Web 程序的性能(在传递数据方面做到按需发送,不必整体提交);
    4.减轻服务器和带宽的负担(将服务器的一些操作转移到客户端);
 
而 Ajax 的不足由以下几点:
    1.不同版本的浏览器对 XMLHttpRequest 对象支持度不足(比如 IE5 之前);
    2.前进、后退的功能被破坏(因为 Ajax 永远在当前页,不会记录前后页面);
    3.搜索引擎的支持度不够(因为搜索引擎爬虫还不能理解 JS 引起变化数据的内容);

AJAX的使用

电话的接打顺序:
    1.首先要有一个电话;
 
    2.拨号;
 
    3.说话;
 
    4.听电话另一边的信息;
 
    //有一个电话:创建请求对象;
    1.var AJAX=new XMLHttpRequest( );
 
    //拨号:设置请求参数;
    2.AJAX.open('get','data/test.json',true);
 
    第一个参数:POST||GET
    POST和GET的区别:
    1.POST主要用来发送数据,GET主要用来接受数据;
    2.PSOT发送数据的安全性较好,而GET较差;
    3.POST发送数据不限制大小,而GET大小受限2~100k。
    什么时候用GET和POST:在数据获取时用GET方式,在操作数据时应使用POST方式。
 
    第二个参数:要请求的url
 
    第三个参数:接受一个布尔值,决定请求的方式
    为true时,服务器请求是异步进行的,也就是脚本执行send() 方法后不等待服务器的执行结果,而是继续执行脚本代码;
    为false时,服务器请求是同步进行的,也就是脚本执行send() 方法后等待服务器的执行结果的返回,若在等待过程中超时,则不再等待,继续执行后面的脚本代码!
    
    
    //观察状态(是否接通)
    3.ajax.onreadystatechange = function(){
        if (ajax.readyState == 4 && ajax.status == 200){
            func_succ(ajax.responseText);
        }else if(ajax.readyState == 4 && ajax.status != 200){
            //alert("ajax faild readyState:"+ajax.readyState+" status:"+ajax.status);
        }
    };
    
    //歪!
    4.ajax.send(null);
 

ajax.readyState

  1. 0 -(未初始化)还没有调用send()方法
  2. 1 -(载入)已调用send()方法,正在发送请求
  3. 2 -(载入完成)send()方法执行完成,已经接收到全部响应内容
  4. 3 -(交互)正在解析响应内容
  5. 4 -(完成)响应内容解析完成,可以在客户端调用了

HTTP 状态码 ajax.status

  1. 1**:请求收到,继续处理
  2. 2**:操作成功收到,分析、接受
  3. 3**:完成此请求必须进一步处理
  4. 4**:请求包含一个错误语法或不能完成
  5. 5**:服务器执行一个完全有效请求失败
  6.  
  7. 100——客户必须继续发出请求
  8. 101——客户要求服务器根据请求转换HTTP协议版本
  9.  
  10. 200——交易成功
  11. 201——提示知道新文件的URL
  12. 202——接受和处理、但处理未完成
  13. 203——返回信息不确定或不完整
  14. 204——请求收到,但返回信息为空
  15. 205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
  16. 206——服务器已经完成了部分用户的GET请求
  17.  
  18. 300——请求的资源可在多处得到
  19. 301——删除请求数据
  20. 302——在其他地址发现了请求数据
  21. 303——建议客户访问其他URL或访问方式
  22. 304——客户端已经执行了GET,但文件未变化
  23. 305——请求的资源必须从服务器指定的地址得到
  24. 306——前一版本HTTP中使用的代码,现行版本中不再使用
  25. 307——申明请求的资源临时性删除
  26.  
  27. 400——错误请求,如语法错误
  28. 401——请求授权失败
  29. 402——保留有效ChargeTo头响应
  30. 403——请求不允许
  31. 404——没有发现文件、查询或URl
  32. 405——用户在Request-Line字段定义的方法不允许
  33. 406——根据用户发送的Accept拖,请求资源不可访问
  34. 407——类似401,用户必须首先在代理服务器上得到授权
  35. 408——客户端没有在用户指定的饿时间内完成请求
  36. 409——对当前资源状态,请求不能完成
  37. 410——服务器上不再有此资源且无进一步的参考地址
  38. 411——服务器拒绝用户定义的Content-Length属性请求
  39. 412——一个或多个请求头字段在当前请求中错误
  40. 413——请求的资源大于服务器允许的大小
  41. 414——请求的资源URL长于服务器允许的长度
  42. 415——请求资源不支持请求项目格式
  43. 416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
  44. 417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
  45.  
  46. 500——服务器产生内部错误
  47. 501——服务器不支持请求的函数
  48. 502——服务器暂时不可用,有时是为了防止发生系统过载
  49. 503——服务器过载或暂停维修
  50. 504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
  51. 505——服务器不支持或拒绝支请求头中指定的HTTP版本

ajax缓存问题:用时间戳清除缓存;

ajaxGet('data/test.txt?t='+ new Date().getTime(),fn)

AJAX的封装

  1. function ajaxGet(url,cb,data){
  2. // 1要处理发送的数据;
  3. data = data || {};
  4. var str = "";
  5. for(var i in data){
  6. str += `${i}=${data[i]}&`;
  7. }
  8. // 2时间戳解决缓存问题;
  9. var d = new Date();
  10. url = url + "?" + str + "__wzqT=" + d.getTime();
  11. // 2开启ajax;
  12. var AJAX = new XMLHttpRequest();
  13. AJAX.open("get",url,true);
  14. AJAX.onreadystatechange = function(){
  15. if(AJAX.readyState == 4 && AJAX.status == 200){
  16. cb(AJAX.responseText);
  17. }
  18. }
  19. AJAX.send();
  20. }

数据发送

POST的数据发送位置:

get发送的位置:

POST发送的数据和GET发送的数据被请求地址接收到后显示的格式不一致
GET发送的数据被解析成key和value
POST发送的数据会被解析成字符串
在发送数据之前ajax.send("user=admin"),设置请求头信息
 
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 
 

ajax异步的更多相关文章

  1. ajax异步请求

    做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...

  2. SSH实战 · AJAX异步校验

    前台JS代码 /*异步验证用户名的输入格式以及是否存在*/ function CheckUsername(){      /*取到用户名输入框*/      var nametxt = documen ...

  3. 淘宝购物车页面 智能搜索框Ajax异步加载数据

    如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...

  4. spring HandlerInterceptorAdapter拦截ajax异步请求,报错ERR_INCOMPLETE_CHUNKED_ENCODING

    话不多说,直接上正文. 异常信息: Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING 问题描述: 该异常是在页面发送ajax请 ...

  5. jquery Ajax异步请求之session

    写了一个脚本,如下: $(function () { $("#btnVcode").click(function () { var receiveMobile = $(" ...

  6. ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

    首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般 ...

  7. ajax异步请求Response.Redirect重定向

    一个ajax异步请求报错->捕获异常->重定向错误提示页面.  一个简单的流程 结果一直搞不定.重定向无效.各种百度之. 后来突然想起 ajax的请求是不能在后台重定向的. 如果硬要重定向 ...

  8. AJAX 异步交互基本总结

    AJAX (Asynchronous JavaScript and Xml) 直译中文 - javascript和XML的异步 同步与异步的区别: 同步交互 执行速度相对比较慢 响应的是完整的HTML ...

  9. 触碰jQuery:AJAX异步详解

    触碰jQuery:AJAX异步详解 传送门:异步编程系列目录…… 示例源码:触碰jQuery:AJAX异步详解.rar AJAX 全称 Asynchronous JavaScript and XML( ...

  10. JSON.stringify实例应用—将对象转换成JSON类型进行AJAX异步传值

    在上一篇中,对JSON.stringify()方法有了初步的认识,并且做了一些简单的例子.本篇将进一步将JSON.stringify用在复杂些的实例中,例如如下需求: 在进jQuery AJAX异步传 ...

随机推荐

  1. django开发_七牛云图片管理

    七牛云注册 https://www.qiniu.com/ 实名认证成功之后,赠送10G存储空间 复制粘贴AK和SK 创建存储空间,填写空间名称,选择存储区域.访问控制选择位公开空间 获取测试域名 七牛 ...

  2. Bagging 和RF的区别

    跑训练无聊看了看别人的面经,发现自己一时半会答不上来,整理一下. 一.Bagging介绍 先看一个Bagging的一个概念图(图来自https://www.cnblogs.com/nickchen12 ...

  3. 入门-windows下安装ETH挖矿

    对刚入门的区块链开发者来说,刚开始可以在windows本地搭建私有链,便于操作,毕竟,要想真正挖到币还是有难度的,下面以ETH为例,在windows环境下安装并实现挖矿. 步骤一.安装geth环境.下 ...

  4. 《JavaEE开发的颠覆者——Spring Boot实战》是一本好书

    这本书的风格非常好.每一节都是先点明这一块知识的要点,随后就手把手的做出一个最简明.但有能体现核心的实例(大多只有几个Class) 这样的书用来熟悉一门框架,实在是再好不过.

  5. 一.B/S架构和C/S架构

    1.B/S架构 Browser-Server,  浏览器和服务器架构.包含客户端浏览器.web应用服务器.数据库服务器的软件系统.用户只需要一个浏览器就可以访问服务.系统更新的时候,只需要更新服务端, ...

  6. 2019 找钢网java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.找钢网等公司offer,岗位是Java后端开发,因为发展原因最终选择去了找钢网,入职一年时间了,也成为了面试官 ...

  7. 给基于对话框的MFC程序添加状态栏并实时显示时间

    转载自丝雪儿 1.首先在string table 里添加两个字串,ID分别为IDS_INDICATOR_MESSAGE and IDS_INDICATOR_TIME 2.在你的 dlg.h 类里面加个 ...

  8. localStorage、sessionStorage、Cookie的区别及用法

    1.webstorage 本地存储,存储在客户端,包括localStorage和sessionStorage. (1)localStorage:生命周期是永久,这意味着除非用户显示在浏览器提供的UI上 ...

  9. vue生成pdf

    主要参考 https://blog.csdn.net/qq_37880968/article/details/94626001 1.添加模块 npm install --save html2canva ...

  10. css之纯css实现流程导航效果

    :::tip 使用纯css线上 流程导航效果.     本文统一采取 flex 布局 ,你也可以采用其他布局实现,核心原理不变 ::: ## 方法一 利用裁剪  该方法IE下不支持 利用裁剪 clip ...