Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确保javascript外部脚本已完成,然后继续_Javascript_Jquery_Html - Fatal编程技术网

确保javascript外部脚本已完成,然后继续

确保javascript外部脚本已完成,然后继续,javascript,jquery,html,Javascript,Jquery,Html,我正在创建一些使用相同大数据集的网页,加载和处理这些网页需要几秒钟。因此它只需加载和处理一次,我将加载放入一个外部的.js脚本中,并将结果数组分配给一个变量,然后我可以在引用该脚本的其他页面中使用该变量 让我们调用加载data external.js的外部脚本和一个使用data index.html的文件。index.html具有带有src=“external.js”的脚本标记,后跟包含页面特定javascript的脚本标记 如何确保index.html脚本等待external.js完成,或者至

我正在创建一些使用相同大数据集的网页,加载和处理这些网页需要几秒钟。因此它只需加载和处理一次,我将加载放入一个外部的.js脚本中,并将结果数组分配给一个变量,然后我可以在引用该脚本的其他页面中使用该变量

让我们调用加载data external.js的外部脚本和一个使用data 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作为一个常规的对象数组,我可以在我的每个页面上使用不同的东西,但它不允许我这样做。我现在在该文件中所做的就是console.log(json)。这将在控制台中生成
[]
,然后我将获得json的正确数据


这不是一个ajax问题。它与ajax无关。

您需要显示external.js中的相关代码-可能它正在进行一些异步处理(例如ajax)?关于只加载和处理一次并使用其他页面中的变量的计划,客户端脚本不是这样工作的。当其他页面打开时,external.js应该已经在浏览器的缓存中,但是使用它的每个页面都会再次进行任何处理。这不是AJAX问题。如何将其取消标记为重复?我的问题不是“如何从Ajax调用中返回响应?”显然,我的问题甚至没有被做这件事的人略过。我同意你的问题不是另一个问题的重复,我已经为你打开了它。但是,
d3.json()
方法正在执行一个ajax调用。您的
loadJson()
方法从哪里调用?我知道异步并不一定意味着ajax。但是
d3.json()
方法确实执行ajax调用,不是吗?d3doco页面似乎这样说,但实际上从未使用过“ajax”一词(它讨论的是XMLHttpRequests,本质上是相同的)。在任何情况下,为了解决您的问题,我建议更新
loadJson()
函数,将回调函数作为参数,然后从页面调用
loadJson()
,传递回调。
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);