我正在创建一些使用相同大量数据的网页,加载和处理需要几秒钟。所以它只需要加载&处理一次,我将加载放在外部.js脚本中,并将结果数组分配给一个变量,然后我可以在引用该脚本的其他页面中使用该变量。
让我们调用加载数据external.js的外部脚本和一个使用数据index.html的文件。 index.html包含带有src="external.js"
的脚本标记,后跟包含特定于页面的javascript的脚本标记。
如何确保index.html脚本等待external.js完成,或者至少等待数据部分完成?我尝试将代码括在$(function() { ... });
中,该代码应该等到页面加载,但它没有用。我可以通过console.log
看到它在完成external.js之前执行index.html。
我是否可以尝试确保在执行索引中的javascript之前完全完成external.js?
添加信息:
external.js有点长,我不想发布所有内容,只是相关部分。在index.html和其他页面中,我将使用数据做很多事情,所以我希望它尽可能小。
External.js使用d3的json()函数(这是最新的版本):
json = [];
var loadJson = function() {
d3.json("data/file.json", function(error, json) {
// above file is an array of about 40,000 objects, ~36MB.
json = json.filter(function(d) { .. };
// above filter keep only the objects with certain properties.
// then I drop the properties I don't care about to reduce the size of the data
var tempdata = [];
json.forEach(function(d, i) {
tempdata[i] = {
"property1thatIwant":d.property1thatIwant,
// etc.
};
json = tempdata;
console.log(json);
(想象一下所有的右括号和东西。)
然后在索引中,我希望能够使用json作为常规的对象数组,我可以在每个页面上使用不同的东西,但它并没有让我这么做。我现在在该文件中所做的就是console.log(json)。这会在控制台中生成[]
,之后我会获得json的正确数据。
这不是一个阿贾克斯问题。它与ajax无关。