确保javascript外部脚本在继续之前已完成

时间:2015-01-05 08:15:18

标签: javascript jquery html

我正在创建一些使用相同大量数据的网页,加载和处理需要几秒钟。所以它只需要加载&处理一次,我将加载放在外部.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无关。

0 个答案:

没有答案