详解Ajax请求(一)前言——同步请求的原理
我们知道,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请求(一)前言——同步请求的原理的更多相关文章
- $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...
- javascript 异步请求封装成同步请求
此方法是异步请求封装成同步请求,加上token验证,环境试用微信小程序,可以修改文件中的ajax,进行封装自己的,比如用axios等 成功码采用标准的 200 到 300 和304 ,需要可以自行修改 ...
- 【PPT详解】曹欢欢:今日头条算法原理
[PPT详解]曹欢欢:今日头条算法原理 悟空智能科技 4月8日 公众号后台回复:“区块链”,获取区块链报告 公众号后台回复:“sq”,进入区块链分享社群 热文推荐: 1000位专家推荐,20本区块链必 ...
- 详解 QT 源码之 Qt 事件机制原理
QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...
- 详解Ajax请求(四)——多个异步请求的执行顺序
首先提出一个问题:点击页面上一个按钮发送两个ajax请求,其中一个请求会不会等待另一个请求执行完毕之后再执行? 答案是:不会,这两个异步请求会同时发送,至于执行的快与慢,要看响应的数据量的大小及后台逻 ...
- 详解Ajax请求(二)——异步请求原理的分析
在上一文章里,我们分析了同步请求的原理.当浏览器向服务器发送同步请求时,服务处理同步请求的过程中,浏览器会处于等待的状态,服务器处理完请求把数据响应给浏览器并覆盖浏览器内存中原有的数据,浏览器重新加载 ...
- 详解ASP.NET MVC应用程序请求生命周期
------转载当一个ASP.NET MVC应用程序提出请求,为了响应请求,包含一些请求执行流程步骤! 在ASP.NET MVC应用程序Http request 和Http response 过程中, ...
- 详解AJAX工作原理以及实例讲解(通俗易懂)
什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...
- 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...
随机推荐
- WordPress设置圆形旋转头像的方法
很多网站的评论者的头像都是圆形的,并且当你的鼠标移上去的时候会旋转,那么这个怎么实现呢,我在网上找了很多,但是和我的主题都不适用,现在把我修改后的代码贴出来,只要将下面的代码添加到style.css中 ...
- ServiceFabric极简文档-1.0 Service Fabric 自定义集群部署
Service Fabric 部署集群:https://docs.microsoft.com/zh-cn/azure/service-fabric/service-fabric-get-started ...
- SignalR Self Host+MVC等多端消息推送服务(4)
由于工作太忙,一直没时间更新博客,之前有很多朋友一直问我什么时候将后续的代码发上来,一直没时间,今天就长话短说,不写文章了,直接上demo,里面将正式项目中用到的一些敏感信息修改了,要使用的话下载后自 ...
- Python功能键
swapcase ,大小写翻转 title,每个单词首字母大写 upper,全部大写 lower,全小写 center,居中(可填充符号) lstrip,去除首尾空格斜杠符号 find,寻找出现的位数 ...
- selenium 基础(一)
selenium安装 pip install selenium selenium操作浏览器原理 早期selenium 1.0 用的selenium RC, 后来selenum2集合了selenium1 ...
- 快速理解web语义化
什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...
- 【Docker】 积累
■ 磁盘空间和docker资源之间的关系 通过docker info | grep Space可以看到Docker占据的磁盘空间的信息.其中Data Space Used表示实际上docker资源占用 ...
- 15分钟理解HTTPS——通俗篇
| 导语 它很深奥吗?你肯定常常见过它,使用它,甚至离不开它... 它很浅显吗?你可能觉得看透它,理解它,甚至懂它... 让我们用15分钟,不那么学术地将它的深挖到底~ 什么?如何证明我是我?本文要上 ...
- Nginx技巧——Nginx/Apache下禁止指定目录运行PHP脚本(转自运维之美)
网站程序的上传目录通常是不需要PHP执行解释权限,通过限制目录的PHP执行权限可以提网站的安全性,减少被攻击的机率. 下面和大家一起分享下如何在Apache和Nginx禁止上传目录里PHP的执行权限. ...
- oracle 常用select sql语句
本人认为很实用的几条语句 1)select ... from ...into... 2)insert into ...select ... 3)select ...from ...left join ...