wujiajax 2014-01-13
开发项目写功能的时候,需要将ajax的返回值赋到全局变量中,然后在该页面其他地方引用,因为ajax异步的原因一直无法成功,只需将async:false,就OK了。
写这个帖子的原因是因为。。。每次需要同步的时候,我记不住‘asyns'这个单词的拼写,每次都得去其他的js里面粘一边过来,为了加深记忆,决定写个使后感。。。
true
)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。
ajax默认所有请求都是设置为异步的
如果需要同步,则设为false
同步不支持跨域请求和数据类型:’jsonp'请求
请注意,同步请求可能会暂时锁定浏览器,停止任何行为,直到该请求完成
在jquery1.8中,如果将请求设置为同步的话,则不支持延迟方法($.Deferred详细内容戳这里,讲的挺好的)
所以你必须使用成功/失败/完成的回调函数来替代延迟方法或者不使用延迟方法
总结一下:
1.如果请求是异步的,不能在回调之外直接拿到返回的data
2.如果设为同步的话,会阻塞后面的代码,也就是说如果这个请求需要执行30秒,就必须等30秒执行完之后,才能继续执行下面的
3.同步不支持跨域请求和数据类型:’jsonp'请求
4,如果将请求设置为同步的话,则不支持延迟方法,不能使用$.Deferred,只能使用success/error/complete
来代替比如 deferred.always()/$.when 等
。。。虽然写完了,但是还是不大记得asyns怎么拼啊。。看来要去背背“asynchronous”这个发音了