`

ajax -async 参数同步异步

 
阅读更多

开发项目写功能的时候,需要将ajax的返回值赋到全局变量中,然后在该页面其他地方引用,因为ajax异步的原因一直无法成功,只需将async:false,就OK了。

 

写这个帖子的原因是因为。。。每次需要同步的时候,我记不住‘asyns'这个单词的拼写,每次都得去其他的js里面粘一边过来,为了加深记忆,决定写个使后感。。。

 

  • async (default: true)
    Type: Boolean
    By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp"requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use ofasync: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().

 

以上为jquery官网给出的API。

 
By default, all requests are sent asynchronously

 ajax默认所有请求都是设置为异步的

 
If you need synchronous requests, set this option to false

 如果需要同步,则设为false

写道
Cross-domain requests and dataType: "jsonp"requests do not support synchronous operation.

 

同步不支持跨域请求和数据类型:’jsonp'请求

 

什么是jsonp,json和jsonp的区别,请戳这里

 

 
Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.

 

请注意,同步请求可能会暂时锁定浏览器,停止任何行为,直到该请求完成

 
As of jQuery 1.8, the use ofasync: false with jqXHR ($.Deferred) is deprecated;

 在jquery1.8中,如果将请求设置为同步的话,则不支持延迟方法($.Deferred详细内容戳这里,讲的挺好的)

开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的。
通常的做法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。
简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行。

 

 

you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().

 所以你必须使用成功/失败/完成的回调函数来替代延迟方法或者不使用延迟方法

 

 

 

 

总结一下:

1.如果请求是异步的,不能在回调之外直接拿到返回的data

2.如果设为同步的话,会阻塞后面的代码,也就是说如果这个请求需要执行30秒,就必须等30秒执行完之后,才能继续执行下面的

3.同步不支持跨域请求和数据类型:’jsonp'请求

4,如果将请求设置为同步的话,则不支持延迟方法,不能使用$.Deferred,只能使用success/error/complete

来代替比如 deferred.always()/$.when 等

 

。。。虽然写完了,但是还是不大记得asyns怎么拼啊。。看来要去背背“asynchronous”这个发音了

 

2
4
分享到:
评论

相关推荐

    jQuery中的ajax async同步和异步详解

    async在jquery ajax中是一个同步参数。本篇文章给大家介绍jq中的ajax async同步和异步,小伙伴跟着小编一起学习吧

    jquery电子文档chm

    async (Boolean) : (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。 beforeSend ...

    Jquery中$.ajax()方法参数详解

    俗说好记性不如个烂笔头,下面是jquery中的ajax方法参数详解,这里整理了一些供大家参考。  1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 2.type: 要求为String类型的参数,请求方式...

    使用ajax的post同步执行(实现方法)

    ajaxSettings.async参数进行设置,默强调内容认情况下是true,即异步,同步时在方法前设置: $.ajaxSettings.async = false;此时在方法执行完,能return出相应的data。 代码块 /** * 得到列表 */ function ...

    浅谈node.js中async异步编程

    异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数、ajax请求等等。 示例: for (var i = 1; i <= 3; i++) { setTimeout(function()...

    jquery-ajax

    async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。 如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等 待请求完成才可以执行。

    jquery-ajaxqueuer:ajax队列的jquery插件

    async Boolean 是否为异步,默认为false,即同步 timeout Number(ms) 设置请求超时时间(毫秒),此设置将覆盖全局设置 namePrefix String 队列名称前缀,默认为'ajaxQueuer' ajax队列是一个数组,由$.ajax方法...

    使用原生js封装的ajax实例(兼容jsonp)

    * @param {boolean}opt.async 是否为异步请求,true为异步的,false为同步的 * @param {object}opt.data 发送的参数,格式为对象类型 * @param {function}opt.success ajax发送并接收成功调用的回调函数 */ ...

    ajax给全局变量赋值问题解决示例

    结果死活赋值不上,纠结了好半天,后来上网查了查,才知道,ajax默认是异步请求,(当要赋值时,此时的值没有拿到,所以赋值不成功)如果要在$.ajax({里面给全局变量赋值,需要改为同步操作,即加上async : false,...

    jQuery中$.ajax()和$.getJson()同步处理详解

    为什么需要用到同步,因为有时候我们给一个提交按钮注册提交表单数据的时候,在提交动作之前会进行一系列的异步ajax请求操作,但是页面js代码会按顺序从上往下面执行,如果你在这过程中进行了异步操作,那么获取不到...

    在jquery中的ajax方法怎样通过JSONP进行远程调用

    这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用 首先介绍下$.ajax的参数 type:请求方式 GET/POST url:请求地址 async:布尔类型,默认为true 表示请求是否为异步,如果为false表示为同步。...

    详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法

    事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return。基本的逻辑剥离出来是这样的: ...

    JQuery实现ajax请求的示例和注意事项

    最近很多人问我ajax该怎么用,怎么访问后台,怎么取得数据页面显示 写一个简单的ajax访问: ... async:false, //控制同步还是异步 data:{scheduleDate:scheduleDate}, //传入参数 success:function(data){ i

    JQuery中使用Ajax赋值给全局变量异常的解决方法

    方法1:先设置同步在进行Ajax操作 代码如下://在全局或某个需要的函数内设置Ajax异步为false,也就是同步$.ajaxSetup({ async : false });  //然后再进行你的Ajax操作$.post(地址, 参数, function(data, status) {...

    AJAXRequest v0.2

    更新: 1)更改构造函数,使带参数,简化使用的步骤 类名:AJAXRequest 创建方法: var ajaxobj=new AJAXRequest(method,url,async,content,callback); 如果创建失败则返回false 属性:method – 请求方法,字符...

    JQuery中使用Ajax赋值给全局变量失败异常的解决方法

    原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去,所以只要改成同步操作就行~ 方法1:先设置同步在进行Ajax操作 //在全局或某个需要的函数内设置Ajax异步为false...

    Jquery ajax 同步阻塞引起的UI线程阻塞问题

    事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return。基本的逻辑剥离出来是这样的: ...

    深入剖析$.ajax()方法

    要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。 cache: 要

    jQuery版AJAX简易封装代码

    开发过程中,AJAX的应用应该说非常频繁,当然,jQuery的AJAX函数已经非常好用,但是小编还是稍微整理下,方便不同需求下,可以简化输入参数,下面是实例代码: $(function(){ /** * ajax封装 * url 发送请求的...

    JQuery中$.ajax()方法参数详解及应用

    async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。 如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等 待请求完成才可以执行。 cache

Global site tag (gtag.js) - Google Analytics