You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法使用AJAX响应文本中的JSON数据,如何提取任务等字段?

解决JSON响应解析与数据提取问题

你遇到的核心问题是PHP返回的响应不是合法的JSON格式——你的代码循环输出单个JSON对象,导致响应文本是多个独立JSON串拼接在一起(比如{"task":"r"...}{"task":"read"...}),这种格式无法被JSON.parse()正常解析。下面是分步解决方案:

1. 修复PHP代码:输出合法的JSON数组

不要循环逐个编码并输出任务对象,直接对整个任务数组执行一次json_encode(),这样返回的是标准的JSON数组:

if (mysqli_query($conn,$query)){
    $result = mysqli_query($conn,$query);
    $tasks = mysqli_fetch_all($result,MYSQLI_ASSOC);
    // 直接编码整个数组,返回一个合法的JSON数组
    echo json_encode($tasks);
    mysqli_free_result($result);
}

修改后,你的响应文本会变成:

[{"task":"r","category":"s","duration":"0"},{"task":"read","category":"s","duration":"10"},{"task":"read","category":"o","duration":"10"}]

这是可以被JavaScript正常解析的格式。

2. 修改JavaScript代码:解析JSON并提取数据

现在可以用JSON.parse()把响应文本转换成JavaScript数组,然后遍历数组提取每个任务的属性到变量中:

方案一:逐个处理每个任务的变量

get(url){
    let xhr = new XMLHttpRequest();
    xhr.open('GET',url,true)
    xhr.onload= function(){
        if (this.status===200){
            // 将响应文本解析为JS数组
            const tasksArray = JSON.parse(this.responseText);
            
            // 遍历每个任务,提取属性到变量
            tasksArray.forEach(task => {
                const taskName = task.task;
                const taskCategory = task.category;
                const taskDuration = task.duration;
                
                // 这里可以根据业务需求使用这些变量,比如打印、渲染到页面等
                console.log(`任务:${taskName},分类:${taskCategory},时长:${taskDuration}`);
            });
        }
    }
    xhr.send();
}

方案二:将同类型属性批量存入数组

如果需要把所有任务的task、category、duration分别存入独立的数组,可以这样做:

get(url){
    let xhr = new XMLHttpRequest();
    xhr.open('GET',url,true)
    xhr.onload= function(){
        if (this.status===200){
            const tasksArray = JSON.parse(this.responseText);
            
            // 初始化三个数组存储对应属性
            const allTasks = [];
            const allCategories = [];
            const allDurations = [];
            
            tasksArray.forEach(task => {
                allTasks.push(task.task);
                allCategories.push(task.category);
                allDurations.push(task.duration);
            });
            
            // 现在可以直接使用这三个数组
            console.log("所有任务名称:", allTasks);
            console.log("所有任务分类:", allCategories);
            console.log("所有任务时长:", allDurations);
        }
    }
    xhr.send();
}

这样就能顺利把响应中的task、category、duration提取到你需要的变量或数组里了。

内容的提问来源于stack exchange,提问作者Elon Musk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:09:36