ajax点击一次却请求了两次,奇异现象:一次点击,两次请求
在开发网页应用程序时,我们经常会使用ajax技术来实现异步请求和响应。有时候我们会遇到奇怪的现象:一次点击,却会发出两次请求。这种现象不仅会影响网页性能,也会给用户带来困扰。那么,这种奇异现象的原因是什么呢?该如何解决呢?
原因分析
我们需要了解ajax的工作原理。当我们使用ajax发送请求时,会创建一个XMLHttpRequest对象,并通过该对象向 服务器 发送请求。服务器返回响应后,我们可以通过该对象获取响应数据,并将其更新到网页上。在这个过程中,我们需要注意以下几个问题:
1. 请求是否重复发送
由于ajax是异步请求,因此我们可以在发送请求后继续执行其他操作。如果我们在请求还未完成时再次发送请求,就会出现重复请求的情况。这通常是由于代码逻辑错误或用户操作不当引起的。
2. 响应是否正确处理
当服务器返回响应时,我们需要正确处理响应数据,并将其更新到网页上。如果我们处理响应的代码逻辑错误或出现异常,就会导致响应数据无法正确显示。这通常是由于代码错误或网络问题引起的。
3. 事件是否正确绑定
当我们使用ajax发送请求时,需要为XMLHttpRequest对象绑定事件监听器,以便在请求状态发生变化时及时响应。如果我们绑定事件的代码逻辑错误或出现异常,就会导致事件无法正确触发。这通常是由于代码错误或浏览器兼容性问题引起的。
针对以上问题,我们可以采取以下措施来解决ajax请求重复发送的问题:
1. 防止重复发送请求
我们可以使用一个标志位来记录当前是否正在发送请求,如果正在发送请求,则不再发送新的请求。例如:
“`Javascript
var isSending = false;
function sendRequest() {
if (isSending) return;
isSending = true;
// 发送请求
// 请求完成后重置标志位
isSending = false;
2. 处理响应数据
我们需要确保正确处理响应数据,并将其更新到网页上。例如,如果我们使用jQuery库发送ajax请求,可以使用以下代码处理响应:
“`javascript
url: ‘/api/getData’,
success: function(data) {
// 处理响应数据
error: function() {
// 处理错误
3. 正确绑定事件
我们需要确保正确绑定事件监听器,并在事件触发时正确处理事件。例如,如果我们使用原生JavaScript发送ajax请求,可以使用以下代码绑定事件监听器:
“`javascript

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
// 处理响应数据
// 处理错误
xhr.open(‘GET’, ‘/api/getData’);
xhr.send();
通过以上措施,我们可以有效地解决ajax请求重复发送的问题。在开发网页应用程序时,我们需要注意代码逻辑的正确性和用户操作的合理性,以避免出现奇怪的现象。我们也需要不断学习和掌握新的技术,以提高网页性能和用户体验。
CPU使用达44%意味着什么
原因 CPU占用率高的八种可能[编辑本段]防毒软件造成故障 由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。 处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,或者,升级你的硬件配备。 [编辑本段]驱动没有经过认证 大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。 处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本。 [编辑本段]病毒、木马造成 大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高不下。 解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。 经常性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识。 [编辑本段]减少启动项 开始->;运行->;msconfig->;启动,关闭不必要的启动项,重启。 [编辑本段]察看“svchost”进程。 是Windows XP系统的一个核心进程。 不单单只出现在Windows XP中,在使用NT内核的Windows系统中都会有的存在。 一般在Windows 2000中进程的数目为2个,而在Windows XP中进程的数目就上升到了4个及4个以上。 [编辑本段]察看网络连接,主要是网卡 当安装了Windows XP的计算机做服务器的时候,收到端口 445 上的连接请求时,它将分配内存和少量地调配 CPU资源来为这些连接提供服务。 当负荷过重的时候,CPU占用率可能过高,这是因为在工作项的数目和响应能力之间存在固有的权衡关系。 你要确定合适的 MaxWorkItems 设置以提高系统响应能力。 如果设置的值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。 要解决此问题,我们可以通过修改注册表来解决:在注册表编辑器中依次展开[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver ]分支,在右侧窗口中新建一个名为“maxworkitems”的DWORD值。 然后双击该值,在打开的窗口中键入下列数值并保存退出:如果计算机有512MB以上的内存,键入“1024”;如果计算机内存小于512 MB,键入“256”。 [编辑本段]鼠标右键引起CPU占用100% 前不久的报到说在资源管理器里面使用鼠标右键会导致CPU资源100%占用,我们来看看是怎么回事?【征兆】:在资源管理器里面,当你右键点击一个目录或一个文件,你将有可能出现下面所列问题:任何文件的拷贝操作在那个时间将有可能停止相应网络连接速度将显著性的降低所有的流输入/输出操作例如使用Windows Media Player听音乐将有可能是音乐失真成因:当你在资源管理器里面右键点击一个文件或目录的时候,当快捷菜单显示的时候,CPU占用率将增加到100%,当你关闭快捷菜单的时候才返回正常水平。 【解决方法】:方法一:关闭“为菜单和工具提示使用过渡效果”1、点击“开始”--“控制面板”2、在“控制面板”里面双击“显示”3、在“显示”属性里面点击“外观”标签页4、在“外观”标签页里面点击“效果”5、在“效果”对话框里面,清除“为菜单和工具提示使用过渡效果”前面的复选框接着点击两次“确定”按钮。 方法二:在使用鼠标右键点击文件或目录的时候先使用鼠标左键选择你的目标文件或目录。 然后再使用鼠标右键弹出快捷菜单。
HTTP响应头中Set-Cookie属性是唯一的么
不是唯一的,一条cookie 就有一个 Set-Cookie。 格式是 key=value;Path=/;domain=xxxxx 这样的。 这是用fiddler对某discuz论坛一次请求的response header 截图。 可以清晰的看到多条 Set-Cookie
res.sendRedirect()和req.getRequestDispatcher().FORward(req,res)的区别
()=重定向 forward(req,res)=转发重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。 因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。 重定向的速度比转发慢,因为浏览器还得发出一个新的请求。 同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。 怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。 但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。 如果你不想看到这样的情况,则选择转发。 转发和重定向的区别 不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。 重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。 转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
发表评论