Ajax api 在 laravel api 资源中请求 return 代码 500

Ajax api request return code 500 in laravel apiresource

我试图在 laravel 上使用 ajax 发出 api 请求,但它一直给我代码 500 错误我已经测试了 url link在浏览器上从 ajax url 生成并且它工作正常但是当它使用 ajax 函数时它将保留 return 代码 500.

这是我的js

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

document.getElementById("infoEmpty").style.display = 'none';
document.getElementById("infoError").style.display = 'none';

$.ajax({
    url: "/api/prospec-survey",
    data: {"change_code":"A", "change_state_code":2, "change_active_state":1},
    method: 'GET',
    dataType: "text json",
    type: 'GET',
    success: function(data){
        $("table tbody").html('')
        data.forEach(function(item, index){
            $("table tbody").append(
                `<tr>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.survey_nomor}</td>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.survey_date}</td>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.contract_id}</td>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.contract_nama}</td>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.class_code}</td>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.user_name}</td>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.route_desc}</td>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.locatioin_komplek}</td>
                    <td style="border-right: 1px solid gray; text-align: center;">${item.pp_name}</td>
                    <td style="text-align: center;"><a href="/customer-care/new-connection/survey-new-customers/print-survey-order/{${item.survey_nomor}}" class="badge bg-primary"><i class="bi bi-printer-fill"></i></a></td>
                </tr>`
            )
        })
        document.getElementById("table").style.display = 'block';
    },
    error:function(rr){
        document.getElementById("infoError").style.display = 'block';
        document.getElementById("infoEmpty").style.display = 'none';
        document.getElementById("table").style.display = 'none';
    }
});

和api路线

Route::apiResource('prospec-survey', ProspectiveCustomersSurveyController::class);

它给我这样的错误

jquery.min.js:4 GET http://127.0.0.1:8001/api/prospec-survey?change_code=A&change_state_code=2&change_active_state=1 500 (Internal Server Error)

但如果我直接在浏览器上使用 ajax 中的 url,它 return 将按预期方式处理数据,如下所示

Illuminate\Pagination\LengthAwarePaginator {#1823 ▼
#items: Illuminate\Support\Collection {#1805 ▶}
#perPage: 10
#currentPage: 1
#path: "http://127.0.0.1:8001/api/prospec-survey"
#query: []
#fragment: null
#pageName: "page"
+onEachSide: 3
#options: array:2 [▶]
#total: 54
#lastPage: 6
}

知道如何解决吗?任何建议都可能真的有帮助

好的,经过一些快速审查后,我发现错误来自 api 控制器本身,它使响应没有返回为 json,而是死掉并使 ajax 请求被阻止通过 diedump 函数

$data = $this->Survey($request, $select_data, $custom_where);
dd($data) // -> this blocked the response
return response()->json($data);

另一个错误来自 ajax 循环,其中数据本身是分页,循环无法访问实际数据,所以我将 jquery 从此

     data.forEach(function(item, index){ // <- cannot access the paginate data
        $("table tbody").append(
            `<tr>
                <td style="border-right: 1px solid gray; text-align: center;">${item.survey_nomor}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.survey_date}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.contract_id}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.contract_nama}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.class_code}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.user_name}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.route_desc}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.locatioin_komplek}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.pp_name}</td>
                <td style="text-align: center;"><a href="/customer-care/new-connection/survey-new-customers/print-survey-order/{${item.survey_nomor}}" class="badge bg-primary"><i class="bi bi-printer-fill"></i></a></td>
            </tr>`
        )
    })

这个

     data.data.forEach(function(item, index){ // <- adding 1 level data so it can access the paginate value
        $("table tbody").append(
            `<tr>
                <td style="border-right: 1px solid gray; text-align: center;">${item.survey_nomor}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.survey_date}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.contract_id}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.contract_nama}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.class_code}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.user_name}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.route_desc}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.locatioin_komplek}</td>
                <td style="border-right: 1px solid gray; text-align: center;">${item.pp_name}</td>
                <td style="text-align: center;"><a href="/customer-care/new-connection/survey-new-customers/print-survey-order/{${item.survey_nomor}}" class="badge bg-primary"><i class="bi bi-printer-fill"></i></a></td>
            </tr>`
        )
    })