记录个js ajax 回调设置全局变量的坑

一个很小的问题,我觉得对于我这个js并不太熟的人,要记录下来。


自己在做微信的jssdk的拍照上传功能,在传多张相片的时候,我使用了ajax来把返回的服务端的素材id保存到本地,然后返回路径。

我在回调函数里设置了一个全局变量来存储这个路径,push,组合数组。

问题就出现在这,我发现我无论上传几张相片,第一次的路径总是获取不到,或者说是赋值不了,我设为5张,全局变量里只能获取到4张的路径,但是,操作已经成功了,我已经在本地看到了保存的图片数目。

这时候我就百思不得其解了,为什么第一次的获取不到?

但是其它的就成功了,这里我使用了循环,没理由第一次不成功,其它的循环调用就成功了?

调试了2个小时,各种改(人傻,自信,没百度)

然后我终于崩溃了

宝宝心里苦,但宝宝不说

还是找度娘

然后找到了一段专业的回答

回调函数里面的变量如何在函数外部也能访问到只需要回调内部变量赋值给全局变量就可以了,但一般这问题都出在没有搞清楚同步和异步的区别,于是虽然赋值给全局变量了,但立即访问全局变量还是没有值的情况。

解决:

注意ajax访问的同步和异步。

使用$.ajax访问,别用get,post等已经封装过的,这类没有$.ajax来的灵活。

$.ajax({url:"/jquery/test1.txt",async:false});//注意这里async,默认为true表示异步,false表示同步。

如果不想使用回调的方式进行后续处理,则可以设置成同步模式。


就是如此简单,这次我一定要记下这个教训。。。。。。。


Top