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

Laravel中基于银行卡BIN码通过Ajax匹配分期数的实现求助

问题:根据银行卡BIN码动态加载对应分期数

我学习Laravel已有4个月,非常喜欢这个框架,但目前遇到一个问题需要帮助。我已经能完成数据库查询获取全部记录,但需求是:当输入客户银行卡前6位(BIN码)时,在下拉选择框中显示数据库中该BIN码对应的分期数。

当前代码:

HTML & JavaScript:

<input type="hidden" id="installments_url" value="{{ route('taksit.rastgele') }}">
<div class="field-container">
   <label for="installments_number" class="form-label">Taksit Sayısı</label>
   <select id="installments_number" class="form-select" name="installments_number" data-style="btn-default" required="true">
        <option value="" selected disabled hidden>Taksit Seçiniz</option>
        <option value="1">Tek Çekim</option>
   </select>
</div>

<script>
    // Get Installments
    function getInstallments() {
        var installments_url = $('#installments_url').val();
        var data = {
            '_token': $('meta[name="csrf-token"]').attr('content'),
        };
        var post = $.post(installments_url, data);
        post.done(function(xhr) {
            if (xhr.data.length > 0) {
                var optionsHtml = '<option value="" selected disabled hidden>Taksit Seçiniz</option>';
                xhr.data.forEach(function(item, index) {
                    optionsHtml += '<option value="' + item + '">' + item + '</option>';
                    $('#installments_number').html(optionsHtml);
                });
            }
        });
    }
</script>

Laravel 控制器方法:

public function rastgeleBinlist()
{
    $deneme = Binlist::where('installments_number')->orderByRaw('installments_number')->get();
    return response()->json([
        'data' => $deneme != null ? $deneme : []
    ]);
}

解决方案步骤:

1. 添加BIN码输入框

在页面新增输入框用于接收银行卡前6位BIN码:

<div class="field-container">
    <label for="bin_code" class="form-label">银行卡BIN码(前6位)</label>
    <input type="text" id="bin_code" class="form-control" maxlength="6" placeholder="输入前6位BIN码">
</div>

2. 修改JavaScript逻辑,传递BIN码并触发请求

更新函数以接收BIN码参数,绑定输入事件触发动态请求:

function getInstallments(binCode) {
    var installments_url = $('#installments_url').val();
    var data = {
        '_token': $('meta[name="csrf-token"]').attr('content'),
        'bin_code': binCode
    };
    var post = $.post(installments_url, data);
    post.done(function(xhr) {
        var optionsHtml = '<option value="" selected disabled hidden>Taksit Seçiniz</option>';
        optionsHtml += '<option value="1">Tek Çekim</option>';
        
        if (xhr.data.length > 0) {
            xhr.data.forEach(function(item) {
                optionsHtml += `<option value="${item.installments_number}">${item.installments_number} 期</option>`;
            });
        }
        $('#installments_number').html(optionsHtml);
    }).fail(function() {
        $('#installments_number').html('<option value="" selected disabled hidden>Taksit Seçiniz</option><option value="1">Tek Çekim</option>');
    });
}

// 输入6位后触发请求,长度不足时重置下拉框
$('#bin_code').on('input blur', function() {
    var bin = $(this).val().trim();
    bin.length === 6 ? getInstallments(bin) : 
    $('#installments_number').html('<option value="" selected disabled hidden>Taksit Seçiniz</option><option value="1">Tek Çekim</option>');
});

3. 修正控制器查询逻辑

根据前端传递的BIN码筛选对应分期数,确保模型存在bin_code字段:

use Illuminate\Http\Request;

public function rastgeleBinlist(Request $request)
{
    $request->validate([
        'bin_code' => 'required|digits:6'
    ]);
    
    $installments = Binlist::where('bin_code', $request->bin_code)
        ->select('installments_number')
        ->distinct()
        ->orderBy('installments_number')
        ->get();
    
    return response()->json([
        'data' => $installments
    ]);
}

4. 确认路由配置

确保路由为POST请求并绑定对应方法:

Route::post('/taksit/rastgele', [YourController::class, 'rastgeleBinlist'])->name('taksit.rastgele');

内容的提问来源于stack exchange,提问作者Nihad KELEŞ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:24:55