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

Laravel中JQuery AJAX无法获取URL数据问题求助

问题排查:AJAX请求医生数据返回异常及JSON解析错误

问题现象

实现下拉框选择医生后加载对应数据功能时,遇到两个问题:

  1. 控制台输出[],无法获取期望的医生数据
  2. 直接访问localhost:8000/dashboard/doctors/1时,出现unexpected end of json input at json.parse (anonymous)错误

控制台可正常输出doctorID、doctorName及ajaxURL(如/dashboard/doctors/1),期望返回包含start_work和end_work字段的结构化JSON数据。


相关代码片段

前端脚本

function handleDoctorSelectChange() {
    const selectedOption = $('#doctorSelect option:selected');
    const doctorID = selectedOption.val();
    console.log(doctorID);
    if (selectedOption.data('doctor')) {
        const doctor = selectedOption.data('doctor');
        const doctorIDs = doctor.id;
        const doctorName = doctor.name;
        console.log(doctorIDs, doctorName);
        const ajaxURL = '/dashboard/doctors/' + doctorIDs;
        console.log('AJAX URL:', ajaxURL);
        $.ajax({
            method: 'GET',
            url: ajaxURL,
            success: function (additionalData) {
                console.log(additionalData);
                if ('data' in additionalData) {
                    const additionalData1 = additionalData.data;
                    console.log(additionalData1);
                    if ('id' in additionalData1 && 'name' in additionalData1) {
                        console.log('Doctor Data:', additionalData1);
                    } else {
                        console.error('Properties not found in additionalData');
                    }
                } else {
                    console.error('Data key not found in the response');
                }
            }
        });
    }
}

Laravel控制器代码

public function getDoctor($id)
{
    return response()->json(Doctor::find($id));
}

路由配置

Route::controller(AppointmentController::class)->group(function () {
        Route::get('dashboard/doctors/{id}', 'getDoctor');
});

问题原因及修复方案

1. JSON解析错误的核心原因

当Doctor::find($id)未找到对应记录时,会返回null,而response()->json(null)会生成空响应,不属于合法JSON格式,导致前端解析失败。

控制器修复代码:

public function getDoctor($id)
{
    $doctor = Doctor::find($id);
    if (!$doctor) {
        return response()->json(['data' => null], 404);
    }
    // 按照期望格式包裹data字段
    return response()->json(['data' => $doctor]);
}

2. 控制台输出[]的原因

前端脚本期望响应包含data键,但原控制器直接返回模型实例,未包裹data字段,导致'data' in additionalData判断失败;同时空响应会被jQuery解析为[]。

前端脚本优化代码:

function handleDoctorSelectChange() {
    const selectedOption = $('#doctorSelect option:selected');
    const doctorID = selectedOption.val();
    console.log(doctorID);
    if (selectedOption.data('doctor')) {
        const doctor = selectedOption.data('doctor');
        const doctorIDs = doctor.id;
        const doctorName = doctor.name;
        console.log(doctorIDs, doctorName);
        const ajaxURL = '/dashboard/doctors/' + doctorIDs;
        console.log('AJAX URL:', ajaxURL);
        $.ajax({
            method: 'GET',
            url: ajaxURL,
            dataType: 'json',
            success: function (response) {
                console.log(response);
                if (response.data) {
                    const doctorData = response.data;
                    console.log('Doctor Data:', doctorData);
                    // 渲染start_work和end_work到视图示例
                    // $('#startWork').text(doctorData.start_work);
                    // $('#endWork').text(doctorData.end_work);
                } else {
                    console.error('未找到该医生的信息');
                }
            },
            error: function(xhr) {
                console.error('请求失败:', xhr.statusText);
                if (xhr.status === 404) {
                    console.error('医生不存在');
                }
            }
        });
    }
}

额外检查点

  • 确认数据库中存在对应$id的医生记录
  • 通过php artisan route:list验证路由是否正确绑定到AppointmentController的getDoctor方法
  • 确保下拉框的data-doctor属性正确存储了医生的id和name数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:35:59