AJAX+PHP从JSON文件获取对应国家货币名失败问题排查
问题解决:AJAX传递国家名获取对应货币失败
问题现象
已成功将选中的国家名称传递至PHP服务器,但无法获取正确的货币名称,返回结果为空字符串或null。
错误原因分析
- 前后端数据格式不匹配:PHP脚本最终返回的是单个货币名字符串(如
"Afghanistan Afghani"),但前端AJAX的success回调里却尝试以result2['0']['currency_name']的方式读取,这是错误的——返回值不是数组或对象数组,无法通过索引和键名获取。 - 字符串匹配可能存在空格干扰:
$('#selCountry').text()获取的文本可能包含前后空格或换行符,导致和JSON文件中的国家名称无法精准匹配。 - PHP中未处理无匹配的情况:如果传入的国家名在JSON中不存在,
$output会保持null,返回给前端的是空JSON值。
修复代码
1. 修正PHP脚本
添加字符串去空格处理,同时确保返回格式清晰:
<?php // 确保JSON文件路径正确,若不在同一目录需调整路径 $jsonPath = 'country-by-currency-name.json'; if (!file_exists($jsonPath)) { header('Content-Type: application/json; charset=UTF-8'); echo json_encode(['error' => 'JSON文件不存在']); exit; } $jsonResponse = file_get_contents($jsonPath); $countryList = json_decode($jsonResponse, true); $output = ['currency_name' => null]; // 对传入的国家名去空格 $targetCountry = trim($_POST['country']); foreach ($countryList as $countryData) { // 同样对JSON中的国家名去空格,避免匹配失败 if (trim($countryData['country']) === $targetCountry) { $output['currency_name'] = $countryData['currency_name']; break; } } header('Content-Type: application/json; charset=UTF-8'); echo json_encode($output); ?>
2. 修正AJAX代码
调整success回调的取值方式,同时对获取的国家名去空格:
// 去空格处理,避免多余字符干扰匹配 let countryN = $.trim($('#selCountry').text()); $.ajax({ url: './currencyAPI.php', type: 'POST', dataType: 'JSON', data: { country: countryN }, success: function (result2) { if (result2.currency_name) { $('#currency').html(result2.currency_name); } else { $('#currency').html('未找到对应货币'); } }, error: function (jqXHR, textStatus, errorThrown) { console.log("获取货币数据失败: " + errorThrown); $('#currency').html('获取数据失败'); } })
额外检查项
- 确认
country-by-currency-name.json文件和currencyAPI.php在同一目录下,若路径不同需修改PHP中的$jsonPath。 - 检查JSON文件格式是否正确,确保没有语法错误(比如末尾多余的逗号)。
内容的提问来源于stack exchange,提问作者Natasha
相关产品推荐
相关产品推荐

