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

CodeIgniter中使用AJAX检查数据库值存在性时始终返回false的问题

问题分析与修复方案

看起来你遇到的核心问题是AJAX始终收到false响应,即便数据库里有对应值,我帮你梳理下代码里的几个关键错误,一步步修复:


1. 请求参数与控制器接收不匹配

前端AJAX传的参数键是username,但控制器里却在拿pincode,这直接导致控制器获取不到正确的邮编值;另外前端input的id是username但name是pincode,命名混乱也容易搞混,建议统一。

修复后的AJAX数据部分:

data: { pincode: username, prodid: prodid }, // 把参数键改成pincode,对应控制器的接收字段

2. 控制器返回方式错误

CodeIgniter的控制器方法不能直接return true/false——AJAX接收的是HTTP响应体内容,return不会把内容输出到浏览器,导致AJAX收到空响应,被默认判断为false。你需要主动输出明确的响应内容。

修复后的控制器函数:

function filename_exists() {
    // 现在能正确拿到前端传的邮编了
    $pincode = $this->input->post('pincode'); 
    $prodid = $this->input->post('prodid');
    
    // 注意:你的模型目前只传了prodid,没用到pincode?这是逻辑漏洞!
    $exists = $this->product->filename_exists($prodid, $pincode); 
    
    // 输出响应内容,让AJAX能接收到
    if ($exists) {
        echo "1"; // 也可以用JSON格式,比如echo json_encode(['status' => true]),更灵活
    } else {
        echo "0";
    }
    // 终止脚本,避免输出框架额外内容
    exit;
}

3. 模型逻辑偏离需求

你当前的模型只根据prodid查询产品,但你的需求是检查该产品是否支持对应邮编配送,不是单纯查产品是否存在。另外模型返回result_array(),虽然非空数组在PHP里会被视为true,但用num_rows()判断是否有匹配记录更直接。

修复后的模型函数(假设你的产品表有supported_pincodes字段存储支持的邮编,可根据实际表结构调整):

function filename_exists($prodid, $pincode) {
    $this->db->where('id', $prodid);
    // 匹配支持的邮编,这里用LIKE是假设字段存的是逗号分隔的邮编列表,可根据实际存储方式调整
    $this->db->where('supported_pincodes LIKE', '%'.$pincode.'%'); 
    $query = $this->db->get('product');
    
    // 返回是否有匹配的配送记录
    return $query->num_rows() > 0;
}

4. AJAX回调的变量未定义

你的success回调里用了msg变量,但这个变量根本没定义,导致成功时会显示错误,需要自定义成功提示文本。

修复后的AJAX success部分:

success: function(response) {
    // 去掉响应内容的空白符,避免意外判断错误
    if (response.trim() == "1") {
        $('#msg').html('<span style="color: green;">Delivery Available at ' + username + '</span>');
    } else {
        $('#msg').html('<span style="color:red;">Delivery Not Available at ' + username + '</span>');
    }
}

额外优化建议

  • 推荐用JSON格式传递响应,能携带更多信息:
    控制器输出:
    echo json_encode([
        'status' => $exists,
        'message' => $exists ? "Delivery Available at ".$pincode : "Delivery Not Available at ".$pincode
    ]);
    
    AJAX里添加dataType: 'json',回调改为:
    success: function(response) {
        var color = response.status ? 'green' : 'red';
        $('#msg').html('<span style="color:'+color+';">' + response.message + '</span>');
    }
    
  • 加上error回调方便调试请求失败的情况:
    error: function(xhr, status, error) {
        console.log("请求错误:", error);
        $('#msg').html('<span style="color:red;">An error occurred, please try again.</span>');
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:24:09