大概就是这样一个情况。
需要从后台读取一些id,可能上百个。
$.ajax({
url: 'data.json',
type: 'post',
dataType: 'json',
success:function(data){
var _code = data.code; //ajax外无法访问_code
window._code = data.code; //ajax外无法访问_code
},
})
比如data.code就是一个length可能上千的一个数组。
那么我应该,如何对他进行一个保存?
我发现在ajax里边存储的数据,在其他地方都无法访问额?
请问遇到这种情况,应该怎么办?
看楼上的这些答案,有些是答主根本就不知道原因在那乱说,有些是说的比较片面。
那我来解释下吧。
首先答主你要了解,
js
是单线程的,就是他从被调用开始,会一条道跑到黑,直到结束为止。然后
$.ajax()
当然,这是个封装过的函数。无论是通过ActiveXObject
或者XMLHttpRequest
的这种真·ajax
方式,还是jsonp
这种伪·ajax
的方式,它们都是异步的,而且是需要等待相应的。那么,我帮你捋一下思路,当页面加载了脚本之后就会开始运行,一直运行到最后的一句为止。当然,其中也许会有你的这句
$.ajax
,但是也只是发起一个请求就没了,(只不过js引擎在背地里会提供一个回调的入口,这个入口暂且放一边,后面会说)然后丝毫不会等待的继续运行下面的语句,直到最后。既然是
ajax
请求,就会有响应的时候。请求相应就会调用之前提到的回调入口,而你需要做的就是,把你想要执行的代码注册到这个回调入口里($.ajax
里的success
再或者error
以及complete
都是回调的入口)也许光说理论你有点懵。那我给你写个例子吧:
首先声明一个函数:
然后来这么两句:
(故意将
ajax
这行写成一句,方便看到我的重点)假设可以通过
xxx
接口成功返回字符串:"abc"
,那么你会看到控制台里:第一个
undefined
是$.ajax
后面的show();
打印出来的;第二个
"abc"
是$.ajax
中注册的success
回调中打印出来的。这里有两个重点:
先执行的是
$.ajax
后面的show();
,而不是$.ajax
中的success
。原因:因为是异步,因为是单线程因为第1点,先执行
show();
的时候,ajax
的请求还没有返回,所以window.data
还没有被赋值,所以就是undefined
以上