使用Ajax从PostgreSQL获取数据实现自动补全文本框无返回问题
解决Ajax调用PHP获取PostgreSQL数据无结果的问题
我帮你排查下Ajax请求里的问题,这几个点应该能解决你的无结果问题:
1. Data参数的语法错误
你的data里有个低级笔误,直接导致PHP拿不到正确的表名参数:
// 错误写法 data: { 'table:':'address', 'fields':'file_as_na', id: 1 },
这里'table:'多了个多余的冒号,应该改成'table':'address',不然PHP里的$_REQUEST['table']会是空值,SQL查询自然没有数据返回。
2. JSONP与JSON的适配问题
你设置了dataType: "jsonp",但要确认你的PHP里的sendJSON()函数是否支持JSONP格式:
- JSONP要求返回的内容是
回调函数名(JSON数据)的包裹格式,如果你的sendJSON只是返回纯JSON字符串,用JSONP会直接解析失败。 - 如果你的前端和PHP脚本在同一域名下,直接把
dataType改成"json"即可,这是最稳妥的选择。 - 如果确实需要跨域使用JSONP,要修改PHP代码支持回调参数:
// 在sendJSON函数中添加回调处理逻辑 $callback = isset($_REQUEST['callback']) ? $_REQUEST['callback'] : ''; $jsonData = json_encode($statement->fetchAll(PDO::FETCH_ASSOC)); if($callback){ echo $callback . '(' . $jsonData . ')'; }else{ echo $jsonData; }
同时前端Ajax要加上callback: '?'让jQuery自动处理回调函数名。
3. 必做的调试步骤
为了快速定位问题,建议你做这两步调试:
- 直接在浏览器地址栏访问PHP脚本,手动带上参数:
ws_geo_attributequery.php?table=address&fields=file_as_na&id=1,看看返回的是正常JSON数据,还是有SQL错误提示。 - 在Ajax中添加
error回调,打印错误信息:
$.ajax({ // 其他参数不变 error: function(xhr, status, error){ console.log("请求错误状态:", status); console.log("错误详情:", error); console.log("服务器返回内容:", xhr.responseText); } });
修正后的Ajax代码示例
$.ajax({ url: "ws_geo_attributequery.php", type:'GET', dataType: "json", // 同域名下优先用json data: { 'table':'address', // 修正了冒号错误 'fields':'file_as_na', id: 1 }, success: function(response){ var data = $(response).map(function(){ return {value: this.file_as_na, id: this.id}; }).get(); $('#name').autocomplete({ source: data, minLength: 0, select: function(event,ui){ $('input#id').val(ui.item.id); } }); }, error: function(xhr, status, error){ console.log("请求失败:", status, error); console.log("服务器返回:", xhr.responseText); } });
最后提醒你:当前的PHP代码存在严重的SQL注入风险,直接把用户传入的参数拼接到SQL语句里非常危险,建议改用参数绑定的方式构建查询,避免恶意参数攻击。
内容的提问来源于stack exchange,提问作者user2722043
相关产品推荐
相关产品推荐

