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

使用AJAX+JSON从MySQL world库提取数据时遇SCRIPT5007错误

解决搜索框仅返回首行数据及SCRIPT5007属性未定义错误

我来帮你拆解并解决这个问题——你踩了两个AJAX+JSON交互里的常见坑,咱们一步步理顺:

问题根源复盘

你遇到的两个问题是连锁的:

  1. 仅获取首行数据:PHP端只查询返回了第一行结果,没有把所有匹配的记录都返回
  2. SCRIPT5007错误:JS里错误地用数组索引(比如jsonObj2[2])去访问字段,但实际所有目标字段(比如Continent)都在同一条数据对象里,跨索引访问自然会拿到undefined,进而触发属性读取错误

第一步:修复PHP端,返回所有匹配数据

检查你的getCountries.php或getCountries2.php,大概率是用了fetch()而不是fetchAll()——前者只会返回单条记录,后者才会拿到所有匹配的行。

正确的PHP示例

<?php
include 'db.inc.php';

// 安全获取搜索关键词,避免SQL注入
$searchTerm = $_GET['term'] ?? '';

// 预处理查询,绑定参数防注入
$stmt = $pdo->prepare("SELECT Name, Continent, Population FROM country WHERE Name LIKE ?");
$stmt->execute(["%$searchTerm%"]);

// 拿到所有匹配的行,转成关联数组
$countries = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 设置响应头为JSON格式
header('Content-Type: application/json');
// 输出JSON字符串
echo json_encode($countries);
?>

第二步:修正JS里的JSON数据访问逻辑

你的AJAX回调里错误地把JSON数组的索引当成了字段的位置,比如jsonObj2[2],但实际返回的JSON应该是对象数组,每个对象对应一条国家记录,字段都在对象内部。

错误写法(你可能的代码)

// 错误:跨索引访问不存在的对象,导致undefined
const continent = jsonObj2[2].Continent;

正确写法

// 假设这是你的AJAX成功回调函数
function onSearchSuccess(response) {
    // 解析JSON响应(如果没自动解析的话)
    const countries = JSON.parse(response);
    // 或者如果用了xhr.responseType = 'json',直接用response即可

    // 清空之前的搜索结果
    const resultBox = document.getElementById('search-results');
    resultBox.innerHTML = '';

    // 遍历所有国家数据
    countries.forEach(country => {
        // 直接访问对象的属性,不用数组索引
        const countryName = country.Name;
        const continent = country.Continent;
        const population = country.Population;

        // 创建DOM元素展示结果
        const resultItem = document.createElement('div');
        resultItem.className = 'result-item';
        resultItem.textContent = `${countryName} | ${continent} | 人口:${population.toLocaleString()}`;
        
        resultBox.appendChild(resultItem);
    });
}

第三步:调试验证

打开浏览器开发者工具(F12),切换到Network标签:

  1. 触发搜索请求,找到对应的AJAX请求(比如getCountries.php)
  2. 查看Response标签,确认返回的JSON是一个包含多个对象的数组,而不是单个对象
  3. 在JS代码里加console.log(countries),在Console标签里查看数据结构,确保和预期一致

这样修改后,应该就能解决仅返回首行数据和属性未定义的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:55:05