jQuery 的 getJSON 方法有时会失败?

2017-04-12 20:58:57 +08:00
 KirbySD

大致像这样

$.getJSON("jsonpath", {}, function (data) {
        jsondata = data;
}, "json");

接着调用这个 jsondata 对象时有一定几率会报错

Uncaught ReferenceError : data is not defined

然而并不是每次都报错,十分神奇。在 console 里面查看 jsondata 的内容时是正确加载进去了。

P.S 原来 js 里用的 jQuery 调用与原生 js 调用混合,后来我把原生调用改写成了 jQuery 调用后不报错了,然而还是有加载失败的现象,直接后果就是要加载到 table 里的数据无法加载, table 空白。

js 文件: github.com/DiruSec/PSO2-EQ-Schedule/blob/master/script/parser.js

应用地址: time.dirusec.com

P.S 2 基本没学过 js ,写起来一泡污,求轻喷(´・ω・`)

4875 次点击
所在节点    JavaScript
9 条回复
lxf1992521
2017-04-12 22:47:14 +08:00
一般 get 方法出错基本上都是因为 cache 的原因,试试 $.ajaxSetup({cache:false})
iot
2017-04-12 22:48:43 +08:00
$.getJSON("jsonpath", callback);

获取到数据之后, callback 才会执行。

你那样写, callback 还没执行呢,你下面的代码就想用获取到的数据,肯定报错咯
alex321
2017-04-12 22:59:43 +08:00
data 的输出格式看下,可能是字符串了。前端保险一些用 JSON.paser 一下。
KirbySD
2017-04-12 23:54:08 +08:00
@lxf1992521 感觉有缓解(心理作用?),不过还是有这种现象

@iot 看了一下文档,好像 function 部分是获取到数据后才会执行……?

@alex321 console 里看了一下,输出是 Object 没错……

这个问题不是每次都出现,而是每次刷新时有几率出现,目前的想法可能是 json 没完全读取就继续执行下面的代码了…但是在 console 里调用对象的话确实是正确加载了
1010011010
2017-04-13 02:35:49 +08:00
请求完成才会执行 callback 。

出错时查看 network 看看返回是不是正确的 json 。
duan602728596
2017-04-13 09:01:58 +08:00
js 的 ajax 是异步的。 Promise 大法好
dtysky
2017-04-13 09:28:41 +08:00
。。。 LZ 还是先学一下 WEB 前端开发基础再写代码吧
异步和同步这个坑刚入门的时候我也踩过

你需要见识一下回调地狱 2333 然后转 Promise
way
2017-04-13 10:27:50 +08:00
Promise 大法好
MinonHeart
2017-04-13 11:54:01 +08:00
用 $.when

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354464

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX