近日在开发的过程中遇到一些逻辑判断上的需求,例如有时候必须通过AJAX给服务器交互,然后等response的数据来判断下一步的逻辑关系。但是如何都不能把response的内容给取出,有点奇怪。必须要我在callBack内容里面加上对应成功或者失败的function。但其实我使用的这个function就判断请求true或者false就可以了,没必要在里面加function,因为想封装成一个工具类。
然后静下,想了一下AJAX的机制,觉得原因是出在机制上。跟同事讨论了一下后,确定问题所在了。然后再进行调试,结果出来了。所以分享一下。
首先,下面是一个普遍常见的发送XMLRequest请求的一段代码
var _bool = false;
request.open("POST", url, true);
request.onreadystatechange = function callBack(){
var response = request.responseText;//假设response等于true
_bool= response;
/*调试1*/
}
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
request.send(parameters);
/*调试2*/
/*后续操作*/
if(_bool){
//对应的操作
}else{
//对应的操作
}
虽然后续操作可以直接放在callBack里面的,但是我们现在姑且这样做吧。实际上也是没什么问题。
操作结果无聊response的值返回的是任何,都返回一个false。开始就以为是赋值,或者变量作用的问题。反思之下觉得没什么错误之处。
在调试1和调试2的位置分别加入alert调试。
顺序是 调试1→调试2
信息分别都是true和false。更加觉得奇怪了。
容易被遗忘的AJAX机制-------同步synchronous和异步asynchronous
同步和异步,总结一下自己的经验:
1、如果是异步的话,注意request某些情况下会被覆盖。即第一个异步请求服务端没返回,第二个提交出去了。而使用同一个request对象的话,第一次 的就被覆盖了。所以永远就只能得到一个返回数据了。所以异步情况下,推荐不使用全局request比较好。但request需要传参囖。并且回调函数使用 完毕的时候记得初始化一下。
2、在异步的情况下,JavaScript代码浏览器是直接全部运行完毕的。那么AJAX服务端返回的response应该谁来接收?刚开始很多人都有这个疑问,都很容易的误认为是JavaScript来接收然后作处理。
其实不然,JavaScript代码执行后,剩下的任务交给了浏览器。一个默默无闻的代码翻译者。是它把一大串乏味的html等代码转换成各种字体,图案,样式给浏览者。
而在同步的情况下,XMLRequest请求发送之后,后续的JavaScript代码不会继续执行,浏览器会一直等response之后在继续。这段时间里面,访问者也不能作其他操作。
其实与AJAX服务端交互的时间十分之快,基本上同步和异步,普通的调试是很难差别所在。除非在服务端进行一下sleep这样的操作。
其实说到这里,之前的问题所在应该就有头绪了。之所以Response获取不了,是因为之后接收的response其实等于一个单独的个体了。也就是AJAX的精髓所在,异步请求的作用。
所以就算顺序是我们想要的,即先alert 调试1的位置,然后调试2。但是值还是获取不了。
上面代码中,只要把
request.open("POST", url, true);
里面的true改为false。我们想要的结果就实现了。
关于异步和同步,必须记住他们的不同点,然后才能灵活运用。虽然很多情况下是不存在任何差别的。但在不断的开发过程中,他们的细微差别可能对你的程序带来十分大的影响。
分享到:
相关推荐
AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器交换...理解并熟练运用AJAX的同步和异步模式,是提升Web应用性能和交互性的重要手段。
对新手学ajax 有帮助。希望大家能够喜欢和利用。
最近的项目用了到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。 而异步则这个AJAX代码...
在文档中提出了两种解决Ajax同步异步问题的方法: 1. 回调函数解决方案: 这种方法是在Ajax请求成功完成后,通过回调函数来执行依赖于异步数据返回的操作。例如,在文档提供的代码片段中: ```javascript $.get...
### XMLHttpRequest的用法及AJAX同步与异步的区别 #### 一、XMLHttpRequest简介 `XMLHttpRequest`对象是实现客户端与服务器端异步交互的重要工具之一。它允许JavaScript执行HTTP请求,无需重新加载整个网页即可从...
2 同步:MyAjaxs " 要调用的方法页面 方法" 参数 function d {alert d["d"] ;} ;">调用方法:1 将下载好的Ajax js文件引用到页面 代码如下:<script src " js MyAjax js" type &...
### 关于解决jQuery同步异步的问题 在前端开发过程中,我们经常会使用到jQuery库来进行DOM操作及Ajax请求等。而在处理Ajax请求时,默认情况下jQuery的`$.ajax()`方法是采用异步的方式执行的,这对于大部分场景来说...
### Ajax页面局部异步刷新技术 #### 知识点概览 在现代Web开发中,异步刷新技术是一项非常重要的技术,它使得网页无需重新加载整个页面就能与服务器交互并更新部分数据。其中,最典型的技术就是Ajax(Asynchronous ...
总结来说,理解AJAX的同步和异步模式是至关重要的,它们直接影响到应用程序的性能和用户体验。在开发过程中,要根据具体场景选择合适的工作模式,并充分利用回调函数来处理服务器的响应。同时,了解不同浏览器对...
jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现假死...
本文将深入探讨Ajax的同步和异步请求,以及它们的工作原理。 ### 1. 异步工作方式 **1.1 图解** 在异步模式下,Ajax请求发送后,浏览器不会等待服务器的响应,而是继续执行后续的代码。当服务器返回响应时,会调用...
在JavaScript的世界里,AJAX(Asynchronous ...总的来说,理解AJAX的同步和异步请求的区别是开发高效、用户友好的Web应用的关键。选择合适的请求类型,结合良好的错误处理策略,可以大大提高应用程序的性能和用户体验。
原生Ajax技术是Web开发中的一个关键组成部分,它允许网页在不刷新整个页面的情况下与服务器进行数据交互,实现异步通信。在这个场景中,我们讨论的是如何使用原生JavaScript代码来实现一个简单的异步提交功能,例如...
在学习jQuery的ajax使用中,我们经常会遇到同步(synchronous)和异步(asynchronous)的概念,这两个术语是异步JavaScript和XML(Ajax)编程的核心。在本文中,我们将详细讲解在jQuery的ajax方法中如何使用async参数控制...
javascript发送ajax请求,获取返回值res,async 同步/异步 var res = sendRequest({ url : "1.php", //necessary method : "post", params : { param1 : "123", param2 : "234" }, async : false });
总结一下,解决js ajax同步请求造成浏览器假死的问题的关键在于理解浏览器单线程的特性及其在执行同步请求时会阻塞UI线程的行为。开发者可以通过使用异步请求或将耗时的请求操作放入setTimeout等JavaScript定时器中...
然而,有时我们可能会遇到Ajax同步问题,这通常是由于对异步和同步理解不透彻或者配置不当导致的。下面我们将详细探讨这个问题。 在ExtJS中,Ajax请求主要通过`Ext.Ajax`对象来实现。`Ext.Ajax.request()`方法是...
实现Ajax同步请求的方式是通过设置`async`属性为`false`。在jQuery中,可以通过AJAX调用的选项中设置`async: false`来达到这一目的。然而,需要注意的是,在实际开发中,推荐使用异步模式,因为同步模式会阻塞浏览器...
**Ajax 实现异步通信详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,大大提升了用户...
最近的项目用了到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。 而异步则这个AJAX代码...