首页 > 解决方案 > Javascript for 循环在结束前停止

问题描述

我有一个非常简单的自制 API,它可以读取服务器上某些文件的内容,解析它们并以 JSON 格式发送它们的内容。

我的网页使用 Ajax 调用 API,读取数据并将它们存储在自定义对象中。问题是,无论我在 JSON 中解析了多少文件,只有第一个文件被处理为我的 Javascript 代码。

runs = [];

function Solution(values) {
    this.number = values[0]
    this.weight = values[1]
    this.value = values[2]
    this.score = values[3]
}

function DateValue(date) {
    regex = new RegExp(/(\d{4})-(\d{1,2})-(\d{1,2})-(\d{1,2}):(\d{1,2}):(\d{1,2})-(\d{1,2})/)
    dateArray = date.split(regex)
    this.year = dateArray[1]
    this.month = dateArray[2]
    this.day = dateArray[3]
    this.hour = dateArray[4]
    this.minutes = dateArray[5]
    this.secondes = dateArray[6]
}           

function Run(values) {
    this.algorithm = values["log"]["Algorithm used"]
    this.weight = values["log"]["Weight"]
    this.value = values["log"]["Value"]
    this.date = new DateValue(values["log"]["Date"])
    this.solutions = []
    for(i = 0; i < values["datas"].length; i++) {
        this.solutions.push(new Solution(values["datas"][i]))
    }
}

$.ajax({
    url: 'api.php', // the data sent by the API is a valid JSON
    dataType: 'json',
    success: function(data, status) {
        console.log(data);
        for(i = 0; i < data.length; i++) {
            console.log(data[i]);
            var run = new Run(data[i])
            runs.push(run);
        }
    }
});

console.log(data)for 循环之前正确打印了从 API 接收到的所有数据,但只console.log(data[i])打印了数组的第一个元素,我不明白为什么。

标签: javascriptajaxfor-loop

解决方案


i您正在多个地方使用单个全局索引变量进行循环。

您的第一个循环调用Run,它运行另一个循环以完成递增i变量。

i每次开始你的循环声明一个本地:

for(var i=0;...)


推荐阅读