同步的ajax&&jquery源代码里高大上的一段
###sync-ajax
遇到的公共框架的bug(异步操作返回之前不该执行的操作执行了)想要hack一下解决,想到jquery里有这样的用法:$.ajax(url, { async: false })
,就跑去看jquery.ajax的源代码,看看jq是怎么block掉js执行的。ctrl+f了半天木有找到while
,觉weird,觉厉。开始仔细的一点一点的看源代码,还是没看到什么地方有奇怪的trick可以block js执行。
换个思路,到MDN看了一下XmlHttpRequest的API,竟发现
void open(DOMString method, DOMString url, optional boolean async, optional DOMString? user,
optional DOMString? password);
无语凝咽。原来是浏览器的native实现,那就无解了,可能真只有while(true)
了。
###jquery中的一段代码
非常清晰:
// Install callbacks on deferreds
for ( i in { success: 1, error: 1, complete: 1 } ) {
jqXHR[ i ]( s[ i ] );
}
确实高大上,想不到更elegant的写法了。