开发者社区> 问答> 正文

ajax返回的数据里,如何存储?

大概就是这样一个情况。
需要从后台读取一些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里边存储的数据,在其他地方都无法访问额?
请问遇到这种情况,应该怎么办?

展开
收起
小旋风柴进 2016-05-27 09:52:04 2925 0
1 条回答
写回答
取消 提交回答
  • 首先答主你要了解,js是单线程的,就是他从被调用开始,会一条道跑到黑,直到结束为止。
    然后$.ajax()当然,这是个封装过的函数。无论是通过ActiveXObject或者XMLHttpRequest的这种真·ajax方式,还是jsonp这种伪·ajax的方式,它们都是异步的,而且是需要等待相应的。

    那么,我帮你捋一下思路,当页面加载了脚本之后就会开始运行,一直运行到最后的一句为止。当然,其中也许会有你的这句$.ajax,但是也只是发起一个请求就没了,(只不过js引擎在背地里会提供一个回调的入口,这个入口暂且放一边,后面会说)然后丝毫不会等待的继续运行下面的语句,直到最后。
    既然是ajax请求,就会有响应的时候。请求相应就会调用之前提到的回调入口,而你需要做的就是,把你想要执行的代码注册到这个回调入口里($.ajax里的success再或者error以及complete都是回调的入口)

    也许光说理论你有点懵。那我给你写个例子吧:
    首先声明一个函数:

    var show = function() {console.log(window.data);};
    然后来这么两句:

    $.ajax({url: 'xxx', success: function(data) {window.data = data;show();}});
    show();
    (故意将ajax这行写成一句,方便看到我的重点)

    假设可以通过xxx接口成功返回字符串:"abc",那么你会看到控制台里:

    `undefined
    "abc"`
    第一个undefined是$.ajax后面的show();打印出来的;
    第二个"abc"是$.ajax中注册的success回调中打印出来的。

    这里有两个重点:

    先执行的是$.ajax后面的show();,而不是$.ajax中的success。原因:因为是异步,因为是单线程
    因为第1点,先执行show();的时候,ajax的请求还没有返回,所以window.data还没有被赋值,所以就是undefined

    2019-07-17 19:17:07
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载