我们知道,ajax是一种异步请求的方式,想要了解异步请求,就必须要先从同步请求说起。常见的同步请求的方式是form表单的提交,我们先从一种同步请求的示例说起。

我们希望输入姓名可以从后台得到身份证号。

那么用同步请求的方式要这么做

前端代码:

<form action="" id = "formId">
<input type="button" id="testBtn" value="测试按钮" onclick="sentSyn();"/><br>
姓名:<input type="text" name = 'name' value=""/><br>
身份证号:<input type="text" name = 'ID' value="${ID }"/><br>
</form>
<script type="text/javascript">alert(111);
function sentSyn(){
    document.getElementById("formId").action = "<%=basePath %>/manage/test/syn";
    document.getElementById("formId").submit();
}
</script>

后台代码:

@RequestMapping("/syn")
public void testSyn(HttpServletRequest request, HttpServletResponse response){
try {
request.setAttribute("ID", "12345");
request.getRequestDispatcher("/ajax.jsp").forward(request, response);
} catch (ServletException | IOException e) {
e.printStackTrace();
} }

姓名输入"小明" 点击按钮页面上的效果是这样的:

         

alert(111)先弹了出来,说明页面重新加载了一次,而且得到小明的身份证号后,名字不见了,原先的数据消失了。要解决这个问题,你用同步请求的方式也是可以的,

在你的后台代码里加上一行:request.setAttribute("name", request.getParameter("name"));就可以实现数据的回显。但是弹框还是会出现,说明页面又一次加载了。

(当然,你这样做输入中文的话,会出现中文乱码的问题,这个问题不在本文的讨论范围之内,有兴趣可以查看我的另一篇博客关于乱码问题的研究:http://www.cnblogs.com/cdf-opensource-007/p/6337448.html)

由此我们可以推断出同步请求是怎么跟服务器进行数据交互的

  使用同步请求,服务器将响应的数据直接输送给浏览器的内存,导致覆盖浏览器内存中原有的数据,浏览器接收到响应的数据后只能展示服务器端返回的数据,无法展示发送请求之前在浏览器中添加的数据。

  当你使用同步请求与服务器进行数据交互的时候,浏览器是直接面对服务器的,也就是在服务器处理请求的过程中浏览器处于等待,卡死的状态,你无法在页面上进行其他的操作。而且当页面信息量较大时,你使用同步请求与服务器进行数据交互,又要回显页面上众多的数据时,你的后台代码将会写的很麻烦既要处理数据的回显又要处理请求,增加服务器的压力。当然同步请求也有他的优点,当你页面上需要与服务器的数据交互的操作较少时或者需要回显的数据较少时,推荐使用同步,因为它是直接与服务器进行数据交互的。仁者见仁智者见智,具体问题具体分析,要根据你的使用场景进行选择。

今天就先写道这里已经很晚了,下篇博客将会对ajax异步请求的原理进行分析。

详解Ajax请求(一)前言——同步请求的原理的更多相关文章

  1. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  2. javascript 异步请求封装成同步请求

    此方法是异步请求封装成同步请求,加上token验证,环境试用微信小程序,可以修改文件中的ajax,进行封装自己的,比如用axios等 成功码采用标准的 200 到 300 和304 ,需要可以自行修改 ...

  3. 【PPT详解】曹欢欢:今日头条算法原理

    [PPT详解]曹欢欢:今日头条算法原理 悟空智能科技 4月8日 公众号后台回复:“区块链”,获取区块链报告 公众号后台回复:“sq”,进入区块链分享社群 热文推荐: 1000位专家推荐,20本区块链必 ...

  4. 详解 QT 源码之 Qt 事件机制原理

    QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...

  5. 详解Ajax请求(四)——多个异步请求的执行顺序

    首先提出一个问题:点击页面上一个按钮发送两个ajax请求,其中一个请求会不会等待另一个请求执行完毕之后再执行? 答案是:不会,这两个异步请求会同时发送,至于执行的快与慢,要看响应的数据量的大小及后台逻 ...

  6. 详解Ajax请求(二)——异步请求原理的分析

    在上一文章里,我们分析了同步请求的原理.当浏览器向服务器发送同步请求时,服务处理同步请求的过程中,浏览器会处于等待的状态,服务器处理完请求把数据响应给浏览器并覆盖浏览器内存中原有的数据,浏览器重新加载 ...

  7. 详解ASP.NET MVC应用程序请求生命周期

    ------转载当一个ASP.NET MVC应用程序提出请求,为了响应请求,包含一些请求执行流程步骤! 在ASP.NET MVC应用程序Http request 和Http response 过程中, ...

  8. 详解AJAX工作原理以及实例讲解(通俗易懂)

    什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...

  9. 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

随机推荐

  1. node.js-v6新版安装过程

    1.Node.js简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用 ...

  2. CDN和CDN加速原理

    随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激增,网络访问路径过长,从 而使用户的访问质量受到严重影响.特别是当用户与网站之间的链路被突发的大流量数据拥塞时,对于异 ...

  3. 负载均衡,会话保持,session同步(转)

    转自:http://bbs.linuxtone.org/thread-18212-1-1.html 一,什么负载均衡一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但 ...

  4. mac下redis安装、设置、启动停止

    下载安装 需要下载release版本,下载地址: http://download.redis.io/releases/ 我这里下载的是: http://download.redis.io/releas ...

  5. spark source code 分析之ApplicationMaster overview(yarn deploy client mode)

    一直不是很清楚ApplicationMaster的作用,尤其是在yarn client mode和cluster mode的区别 网上有一些非常好的资料,请移步: https://blog.cloud ...

  6. Ubuntu上将终端安装到右键上

    Ubuntu上将终端安装到右键上 author:headsen chen    2017-10-12  10:26:12 个人原创,允许转载,请注明作者和出处,否则依法追究法律责任 chen@chen ...

  7. USB协议基础知识笔记

    usb协议 功能层: 控制传输.中断传输.块传输(批量传输).同步传输 设备层:管理USB设备.分配地址.读取设备描述符 总线接口层:采用NRZI编码-反向非归零编码(0将前一个电平翻转,1不翻转) ...

  8. 微信公众号开发,weUi组件,问题总结

    1.实现上拉分页,Google兼容问题,weui框架提供的模板是这样的($(document.body).infinite()),在body定一个div通过这个div,实现上拉 $('#wrapper ...

  9. Divisor counting [线性筛积性函数]

    Divisor counting 题目大意:定义f(n)表示整数n的约数个数.给出正整数n,求f(1)+f(2)+...+f(n)的值. 注释:1<=n<=1000,000 想法:我们再次 ...

  10. apache实现301永久性重定向代码

    301重定向(301 redirect)又叫301代表永久性转移(Permanently Moved),将各种网络请求重新定个方向转到其它位置,是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬 ...