laravel 在数据库中插入24-25条记录后, AJAX 函数不断出错

oknwwptz  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(115)

我有一个30 - 80个输入的多选复选框,我为这个表单编写了Ajax代码,一旦选中复选框,它就会将记录发送到数据库。选择第25条或第26条记录后出现问题,错误是说值重复,但每个输入的值是唯一的。错误日志中提到的值是第一个选中的复选框的值。
我想实现的是,一旦复选框被点击,它应该保存在数据库中,一旦复选框被取消选中,记录应该从数据库中删除。
超文本:

<input type="checkbox" onClick="toggle(this)" /> Toggle All<br/>
                                        @foreach ($counties as $county)
                                            <li>
                                                <input class="checkIt" type="checkbox" id="cnty_id" name="cnty_id"
                                                value="{{ $county->id }}" @foreach($jct_fr_cnty as $jct) @if($jct->cnty_id == $county->id) checked @endif @endforeach>
                                                {{ $county->county }}
                                            </li>
                                        @endforeach

AJAX :

$('.checkIt').bind('click', function() {
    if($(this).is(":checked")) {
        console.log("Checked");
        $.ajax({
        type: "POST",
        url: '{{ url('company/assignment/interstate/cntys') }}',
        data: $("#cntyselectform").serialize()
    }).done(function( result ) {
        console.log(result);
    });
    } else {
        console.log("Unchecked");
        $.ajax({
        type: "DELETE",
        url: '{{ url('company/assignment/interstate/cntysrem') }}',
        data: $("#cntyselectform").serialize()
    })
}
});

主计长

public function postcntyinterstate(Request $request)
{
    jct_fr_cnty::create([
        'cmp_id' => $request->cmp_id,
        'cnty_id' => $request->cnty_id,
        'svc_id' => $request->svc_id
    ]);

    return response()->json(['success'=>'Data is successfully added']);

}

这是切换所有按钮的代码,它选中所有复选框并将值发送到数据库,没有任何问题。

function toggle(source) {
        checkboxes = document.getElementsByName('cnty_id');
        for (var i = 0, n = checkboxes.length; i < n; i++) {
            checkboxes[i].checked = source.checked;
            console.log("Checked");
            $.ajax({
                type: "POST",
                url: '{{ url('company/assignment/interstate/cntys') }}',
                data: $("#cntyselectform").serialize()
            }).done(function(result) {
                console.log(result);
            });
        }
    }

表格代码:

<form id="cntyselectform" method="POST"
                            action="{{ route('company.cntyinterstate', ['company' => $company->id]) }}">
                            @csrf
                            <div class="col-lg-12 mb-3 mt-3 mb-sm-0">
                                <h3>Please select counties</h3>
                                <div name="cntSelect[]" id="cntSelect">
                                    <ul>
                                        <input type="checkbox" onClick="toggle(this)" /> Toggle All<br />
                                        @foreach ($counties as $county)
                                            <li>
                                                <input class="checkIt" type="checkbox" id="cnty_id" name="cnty_id"
                                                    value="{{ $county->id }}"
                                                    @foreach ($jct_fr_cnty as $jct) @if ($jct->cnty_id == $county->id) checked @endif @endforeach>
                                                {{ $county->county }}
                                            </li>
                                        @endforeach
                                    </ul>
                                </div>
                                <input type="hidden" value="{{ $company->id }}" name="cmp_id" id="cmp_id">
                                <input type="hidden" value="1" name="svc_id" id="svc_id">

                                {{-- <button id="cntyselect-button" type="submit" class="btn btn-primary">Submit</button> --}}
                            </div>
                        </form>

数据库:

dldeef67

dldeef671#

我明白的逻辑。但是看起来有点不完整。让我们来修正它:
你绝对不应该有重复的ID。它可能会工作,但它是语义上不正确的,你不应该这样做。(你在代码的循环中指定的ID将在文档中重复。)AND摆脱不必要的循环。

<input type="checkbox" onClick="toggle(this)" /> Toggle All<br/>
@php
    $jct_fr_cnty_array = array_column($jct_fr_cnty->toArray(), 'cnty_id');
@endphp
@foreach ($counties as $county)
    <li>
        <input class="checkIt" type="checkbox" name="cnty_id"
        value="{{ $county->id }}" @checked(in_array($county->id, $jct_fr_cnty_array))>
        {{ $county->county }}
    </li>
@endforeach

由于文档中重复的id及其值而无法正确标记和触发的一些元素可能导致了此错误。
如果您正确地执行删除操作,并且在相关复选框中提供正确的选中/取消选中条件,我认为当您应用此操作时,错误将得到纠正。

相关问题