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

Codeigniter 4 数据库结果返回Ajax显示[object Object]问题

问题概述

CodeIgniter 4开发中,数据库查询结果通过接口返回给前端Ajax回调时,alert弹出内容为[object Object],无法展示查询得到的partno字段实际值。涉及原有代码如下:

  • 控制器层代码
$partno = model(Ecart_model::class)->getPartno($productid);
echo json_encode($partno);
  • 模型层代码
public function getPartno($productid){
    $db = db_connect();
    $partno = $db->table('products')->select('partno')->where('id', $productid)->get();
    return $partno;
}
  • 前端Ajax请求代码
function addtoecart(ip,productid){
    var postData = {ip: ip, productid: productid};

    $.ajax(
        {
            url : 'https://www.myurl.com/ecart/add',
            type: 'POST',
            data : postData,
            dataType: "json",

            success: function(result) {
                alert(result);
            },
        });
}
错误原因

共两处核心错误:

  1. 模型层返回值类型错误:CodeIgniter 4中查询构造器的get()方法返回的是数据库结果集对象,不是直接的查询数据数组/字段值,直接对结果集对象做json_encode会输出包含大量内部属性的对象结构,不是预期的单字段值。
  2. 前端取值逻辑错误:JavaScript中直接alert一个对象类型变量时,会默认调用对象的toString方法,固定输出[object Object],不会展示对象内部的属性值。
修复方案

按以下顺序修改三层代码即可:

1. 修正模型层查询逻辑

调用结果集的取值方法拿到实际字段值,不要直接返回结果集对象:

public function getPartno($productid){
    $db = db_connect();
    // getRowArray()以数组形式返回查询到的第一条记录
    $product = $db->table('products')->select('partno')->where('id', $productid)->get()->getRowArray();
    // 兼容查询不到数据的场景,返回空字符串即可
    return $product ? $product['partno'] : '';
}

2. 优化控制器响应逻辑

不要直接echo输出json,使用框架自带的JSON响应方法,自动设置正确的响应头,避免乱码或格式错误:

$partno = model(Ecart_model::class)->getPartno($productid);
// 统一返回结构,前端取值更方便
return $this->response->setJSON([
    'code' => 0,
    'partno' => $partno
]);

3. 修正前端回调取值逻辑

从返回的结果对象中读取对应字段,不要直接alert整个对象:

function addtoecart(ip,productid){
    var postData = {ip: ip, productid: productid};

    $.ajax(
        {
            url : 'https://www.myurl.com/ecart/add',
            type: 'POST',
            data : postData,
            dataType: "json",
            success: function(result) {
                // 读取返回结构中的partno字段
                alert(result.partno);
                // 调试时优先用console.log打印完整结构,比alert更直观
                // console.log(result)
            },
        });
}

调试提示:排查接口返回值问题时,优先打开浏览器开发者工具的Network面板,查看对应请求的Response内容,能直接看到后端返回的原始JSON结构,比用alert调试效率高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:27:25