【问题标题】:Load JSON before anything else先加载 JSON
【发布时间】:2017-08-07 14:59:39
【问题描述】:

我正在尝试在加载其他任何内容之前加载 JSON,因为当浏览器连接到服务器时我需要立即访问 JSON。

这就是我加载 json 的方式

$.getJSON('icons.txt', function(iconData) {
    icons = iconData;
});

我怎样才能让 javascript 先加载 json,然后再加载其他内容?或者至少让它在用户连接之前加载。

【问题讨论】:

  • $.getJSON 返回一个承诺对象。如果您想在加载 1 个或多个 json 文件后执行某些操作,请使用 $.when api 并传递从 $.getJSON 调用返回的 promise 对象,$.when 将在加载所有 json 后给您一个回调。 $.when -> api.jquery.com/jquery.when $.getJSON api.jquery.com/jquery.getjson 这是你要找的吗?

标签: javascript jquery json


【解决方案1】:

只需将所有其他代码放入function(iconData) {icons = iconData;});回调函数中,它将在获取JSON后执行。

【讨论】:

  • 我应该把我所有的代码放在$.getJSON?如果我想在哪里使用$.getJSON 两次..
  • @MartijnEbbens,如果您想在获取 JSON 之后执行一些代码,您需要将此代码放在回调函数中(在您的情况下为function(iconData) {icons = iconData;});)。 .getJSON 是一个异步操作,如果你只是把代码放在它后面,这段代码将在 JSON 填充被获取之前执行。如果你想调用getJSON 两次或更多次,你可以将其他代码包装在函数中并像这样调用它:$.getJSON('icons.txt', function(iconData) {stuffToDoAfterJsonFetched()});
【解决方案2】:

如果你把你的标签放在 HTML 的头部,它应该首先被执行。

可能重复:Load javascript before rendering page?

【讨论】:

  • 我怎样才能从文件中访问 JSON?
  • 那么你可以在使用你刚刚获取的json之后使用dom。
  • 所以我只需将代码粘贴到 HTML Head 中就可以了..?
【解决方案3】:

头部加载代码,然后设置为同步加载

$.ajaxSettings.async = false;
$.getJSON(url, data, function(data){ });

【讨论】:

  • 我怎样才能从文件中访问 JSON?
  • 是的,这行得通,但我确实得到了弃用。 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
  • 这个错误是可以理解的,因为你是同步加载一个文件,代码继续后会等待文件加载完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多