
本文教你将传统返回 HTML 的 PHP 接口改造为标准 JSON API,涵盖数据结构设计、json_encode() 正确用法、HTTP 头设置及常见陷阱,助 Vue.js 前端无缝对接。
本文教你将传统返回 html 的 php 接口改造为标准 json api,涵盖数据结构设计、`json_encode()` 正确用法、http 头设置及常见陷阱,助 vue.js 前端 seamlessly 对接。
要将原有返回 HTML 字符串的 PHP 逻辑改为返回结构化 JSON 数据,核心在于分离数据与展示:不再拼接 HTML 片段(如 'Nadm. výška: ' . hsc($par[6]) . ' m'),而是构建清晰的 PHP 关联数组,再通过 json_encode() 序列化,并设置正确的 HTTP 响应头。
以下是改造关键步骤与示例代码:
✅ 1. 构建结构化数据数组(而非 HTML 字符串)
将原代码中所有 $ret[0] .= ... 这类 HTML 拼接逻辑,替换为键值明确的数组字段:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
$par = explode(';', caesarCipher($m[1], -3));
// 默认值处理
if (empty($par[0])) {
$par[0] = 'x';
}
// 获取基础位置信息(假设 hzsGetSMSPosition 返回 [lat, lng, address] 等)
$positionData = hzsGetSMSPosition($par, $sender, 'cz');
// 构建标准化响应数据
$response = [
'status' => 'success',
'data' => [
'position' => [
'latitude' => $positionData[0] ?? null,
'longitude' => $positionData[1] ?? null,
'address' => $positionData[2] ?? null,
],
'elevation' => !empty($par[6]) ? (int)$par[6] : null,
'current_status' => [],
'raw_sms' => $par,
],
'timestamp' => date('c'),
];
✅ 2. 解析状态位($par[25])并存入数组
避免拼接字符串,直接映射二进制位到语义化状态标签:
$statusLabels = [
'ťažký úraz',
'autonehoda so zranením',
'bolesť na hrudi',
'ťažké krvácanie',
'alergická reakcia',
'dýchavičnosť',
'iný problém / bolesť brucha',
'bezvedomie',
'svedok',
'lavína',
'uviaznutie',
'zablúdenie',
'zranenie v horách'
];
$terajsi_stav = [];
$bitString = str_pad($par[25], 13, '0', STR_PAD_RIGHT); // 补齐至13位
for ($i = 0; $i <h3>✅ 3. 设置响应头 + 输出 JSON</h3><p>务必在 echo json_encode(...) 前发送标准 JSON 响应头,确保前端正确解析:</p><pre class="brush:php;toolbar:false;">header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *'); // 开发阶段可启用 CORS(生产环境请限制域名)
// 使用 JSON_UNESCAPED_UNICODE 避免中文被编码为 \uXXXX
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
exit;⚠️ 注意事项
- 不要混用 echo 输出 HTML 和 JSON:一旦输出任何非 JSON 内容(包括空格、BOM、调试 var_dump),JSON 将失效;
- 检查数据类型:json_encode() 会忽略 null、资源类型或不可序列化对象,建议提前 is_scalar() 或 is_array() 校验;
-
错误处理:生产环境应捕获异常并返回带 error 字段的 JSON,例如:
if (json_last_error() !== JSON_ERROR_NONE) { http_response_code(500); echo json_encode(['error' => 'JSON encoding failed'], JSON_UNESCAPED_UNICODE); exit; } -
Vue.js 调用示例(供参考):
axios.get('/api/sms-process.php?sms=...').then(res => { console.log('Elevation:', res.data.data.elevation); console.log('Status:', res.data.data.current_status); });
通过以上改造,你的 PHP 接口将输出符合 RESTful 规范的 JSON 数据,不仅提升前后端协作效率,也为后续扩展(如多端适配、API 文档生成)打下坚实基础。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










