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

CodeIgniter 4按钮变量传递至控制器为空问题排查

排查CodeIgniter 4中AJAX传递变量为null的问题

你遇到的核心问题是点击a标签时默认跳转行为打断了AJAX请求,同时代码里还有几处语法/逻辑错误,导致控制器接收不到quotation值,以下是具体排查和修正方案:

1. 首要问题:未阻止a标签的默认跳转行为

点击.edita标签时,浏览器会优先执行其href属性的跳转,AJAX请求还没完成就被中断,导致控制器根本没收到POST的quotation数据,自然输出null。

修正AJAX代码:

添加e.preventDefault()阻止默认跳转,同时修正回调函数的错误写法:

$(document).on('click', '.edit', function(e) {
    // 阻止a标签的默认跳转行为
    e.preventDefault();
    
    var quotation = $(this).attr('data-quotation');
    // 获取a标签的原跳转地址
    var targetUrl = $(this).attr('href');

    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: baseurl + 'purchase/senddata/' + quotation,
        data: {
            'quotation': quotation
        },
        success: function(data) {
            // 确保AJAX请求完成后再跳转
            window.location = targetUrl;
        }
    });
});

2. 控制器代码的优化与修正

你的路由已经把URL中的(:segment)传递给了edit_data方法的$id参数,这个值就是你要的quotation,完全可以直接使用,不需要再通过getVar获取POST数据(当然如果要保留POST传递也可以,但没必要重复传):

修正控制器代码:

public function edit_data($id_quotation)
{
    // 直接使用路由传递的$id_quotation,无需再获取POST参数
    $data = [
        'title'             => 'Edit Purchase Order',
        // 补充:原逻辑中`getPurchase`需要的purchase id,可通过AJAX额外传递
        'invoice'           => $this->purchases->getPurchase($this->request->getVar('purchaseId')),
        'dataQuotation'     => $this->purchases->getQuotationById($id_quotation)
    ];
    dd($id_quotation);
    return view('purchase-order/edit-data', $data);
}

3. 补充:HTML标签的优化

把purchase的id也存入data属性,方便AJAX传递完整参数:

<a class="dropdown-item edit" href="<?= base_url("/purchase/edit/{$row->id}") ?>" data-quotation="<?= $row->id_quotation ?>" data-purchase-id="<?= $row->id ?>">Edit</a>

对应的AJAX中添加purchaseId参数:

data: {
    'quotation': quotation,
    'purchaseId': $(this).data('purchase-id')
},

这样控制器就能正确获取到purchase的id,用于查询invoice数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:37:09