大概就是这样一个情况。
需要从后台读取一些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里边存储的数据,在其他地方都无法访问额?
请问遇到这种情况,应该怎么办?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
window._code = data.code;这个写法,要等ajax 请求完成了之后才能在外部访问的 ;
你之所以觉得在外部访问不了是因为你访问这个数据的时候 因为函数的异步问题,他都还没获取到这个数据呢 ,所以你可以在
success函数里面调用一个函数,然后去实现你想要的功能主要就是在外面定义和
window._code = data.code;这种方法都是可行的,你访问不到是因为ajax还没请求完成,你可以在success中添加回调来处理跟楼上一样 把你要的处理流程另外定义成函数 然后在success后调用这个方法 带上你的数据即可
一句话改成同步的模式就可以
只是一个异步问题。想要在外部实时访问到_code其实很简单,对于ie8以下的浏览器。唯一的方法就是定时器轮询,因为你无法知道在js的单一线程中什么时候回调你的success。而对于ie8以上的浏览器已经兼容es5了,事情太好办了,无非是在你的windo._code设置setter罢了。。。所以此时你需要一个浏览器嗅探,低版本需要setInterval,而现代浏览器只需setter。例如
而楼上的各种答法其实脱离不开的就是ajax编程中的金字塔式编程。在promise规范出来之后,此类编写代码方式是不怎么优雅的。所以基于优雅回调且基于$。我们可以写成
涉及到ajax异步操作的变量赋值,最好是引入jquery的 deferred 对象,可以避免变量获取不到值的情况。
另外,jquery的ajax回调还是建议使用promise的形式
var一个全局变量,然后回调里面存储不就行了
ajax请求(async:false|true)加载同步与异步的功能区别
1、异步情况:ajax单独开启一个请求,ajax请求未完成即window._code未被赋值时,外部先调用window._code,因为值为空undefined;
2、同步情况:ajax请求完成后(success或error等),window._code被赋值,后续外部操作才可以调用。