如何使用PHP与jQuery调用车辆XML API,根据车牌号自动填充表单
解决方法
1. 修正后端代理接口 api.php
原代码问题说明
- 目标接口为GET请求类型,原代码错误配置了
CURLOPT_POST=1强制用POST方式提交 - 未获取前端传入的车牌号参数,未动态拼接请求参数
- 存在语法错误:
CURLOPT_POSTFIELDS配置末尾多了多余的点号,还用到了未定义的变量$xmlcontent - 未将返回的XML数据解析为前端需要的JSON格式,也没有统一的错误处理逻辑
修正后代码
<?php // 替换为你的实际接口授权信息 $user = "USERNAME"; $password = "PASSWORD"; // 校验必填参数 if (!isset($_GET['number']) || empty(trim($_GET['number']))) { http_response_code(400); echo json_encode(['status' => 'error', 'msg' => '缺少车牌号参数']); exit; } $number = trim($_GET['number']); // 拼接第三方接口请求地址 $apiUrl = sprintf( "https://example.com/xmlService/car.aspx?user=%s&password=%s&number=%s", urlencode($user), urlencode($password), urlencode($number) ); // 初始化CURL请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, 0); // 明确使用GET请求 // 如第三方接口SSL证书存在问题可临时开启以下两项,生产环境建议关闭 // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $content = curl_exec($ch); // 处理CURL请求错误 if(curl_errno($ch)) { http_response_code(500); echo json_encode(['status' => 'error', 'msg' => '接口请求失败:' . curl_error($ch)]); curl_close($ch); exit; } curl_close($ch); // 解析XML返回结果 $xml = simplexml_load_string($content); if (!$xml) { http_response_code(500); echo json_encode(['status' => 'error', 'msg' => '返回数据解析失败']); exit; } // 组装返回给前端的JSON数据 $result = [ 'status' => 'success', 'data' => [ 'make' => (string)$xml->make, 'vehcom' => (string)$xml->vehcom, 'color' => (string)$xml->color ] ]; header('Content-Type: application/json; charset=utf-8'); echo json_encode($result); ?>
2. 修正前端代码
原代码问题说明
- 未绑定车牌号输入框的
change事件,无法在用户输入完成后触发请求 - 未动态获取输入框内填写的车牌号,固定写死了请求参数
- 拿到返回结果后没有对应的表单字段填充逻辑
修正后代码
在原有表单代码的底部添加以下JS代码(请确保页面已提前引入jQuery库):
<script type="text/javascript"> // 监听车牌号输入框的内容变更事件 $('#regno').on('change', function() { const regNo = $(this).val().trim(); // 输入为空时清空关联字段 if (!regNo) { $('#make, #vehcom, #color').val(''); return; } $.ajax({ url: 'api.php', type: 'GET', dataType: 'json', data: {'number': regNo}, success: function(response) { if (response.status === 'success') { // 自动填充对应字段 $('#make').val(response.data.make); $('#vehcom').val(response.data.vehcom); $('#color').val(response.data.color); } else { alert('获取车辆信息失败:' + response.msg); $('#make, #vehcom, #color').val(''); } }, error: function() { alert('网络请求失败,请重试'); $('#make, #vehcom, #color').val(''); } }); }); </script>
额外注意事项
- 上线前务必替换
api.php中的USERNAME和PASSWORD为你的实际接口授权凭证 - 建议给
api.php增加请求频率限制、来源校验逻辑,避免接口被恶意调用泄露授权信息 - 可根据业务需要添加加载状态、输入格式校验等交互优化
内容的提问来源于stack exchange,提问作者Jack Johnson
相关产品推荐
相关产品推荐

