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

Laravel 5.6 无需传递页面数据的Ajax请求实现疑问

嘿,你的思路其实已经很接近了!不过有几个小细节调整一下就能完美实现需求,而且能让代码更符合Laravel的安全规范。

首先说下现有代码的小问题:GET请求不适合用来修改数据库数据(RESTful规范里GET是用来获取资源的,POST/PUT才是修改资源的正确方式),而且你还需要补充日期字段的存储逻辑。下面是调整后的完整方案:

1. 调整路由为POST类型

把原来的GET路由改成POST,既符合规范也更安全:

Route::post('/application-background-sent/{id}', 'ApplicationsController@backgroundSent');

2. 更新Ajax请求(带上CSRF令牌)

Laravel会拦截没有CSRF令牌的POST请求,所以我们需要给Ajax请求加上令牌,同时把请求类型改成POST:
首先在页面的<head>标签里添加CSRF元标签:

<meta name="csrf-token" content="{{ csrf_token() }}">

然后修改你的Ajax代码:

var url2 = "/application-background-sent/{{$application->id}}"; 

$(document).ready(function(){ 
    // 全局配置CSRF令牌,让所有Ajax请求自动带上
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    $('#bgSubmit').click(function(e){ 
        // 阻止按钮默认的表单提交行为(如果按钮在表单内的话)
        e.preventDefault();
        
        $.ajax({ 
            url: url2, 
            success: function(data) { 
                alert(data.success); 
            },
            error: function() {
                alert('提交失败,请稍后重试');
            },
            type: 'POST' 
        }); 
    }); 
});

3. 完善控制器的存储逻辑

加上日期字段的赋值(假设你的数据库表有bg_check_submitted_at字段用来存储提交日期):

public function backgroundSent($id) { 
    $application = Application::findOrFail($id); 
    $application->bg_check_submitted_by = Auth::user()->name;
    // 存入当前时间,Laravel的now()会自动生成符合数据库格式的时间
    $application->bg_check_submitted_at = now();
    $application->save(); 

    return response()->json(['success'=>'数据已成功保存']); 
}

额外小提示

如果你不想全局配置CSRF令牌,也可以直接在Ajax的data参数里单独传入:

$.ajax({ 
    url: url2, 
    data: { _token: '{{ csrf_token() }}' },
    // ...其他参数不变
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:02:43