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

如何使用Ajax结合复选框仅更新数据表的单个列?

Toggle active Column with Checkbox (Laravel)

Alright, let's get that checkbox toggle working to update your active column—here's a complete solution that fits your existing code setup:

1. Frontend JavaScript (Handle Checkbox Changes)

You already have the HTML checkbox set up with data-name and data-id, so we just need to add a listener to send an AJAX request when the checkbox is toggled. Add this to your blade file or a dedicated JS asset:

$(document).ready(function() {
    // Listen for checkbox state changes
    $('input[data-name="active"]').on('change', function() {
        const courierId = $(this).data('id');
        const activeState = $(this).is(':checked') ? 1 : 0;

        // Send update request to the server
        $.ajax({
            url: `/couriers/${courierId}/update-status`,
            method: 'POST',
            data: {
                _token: '{{ csrf_token() }}', // Required for Laravel CSRF protection
                active: activeState
            },
            success: function(response) {
                // Optional: Add user feedback (like a toast message)
                console.log('Status updated successfully!', response);
            },
            error: function(xhr) {
                console.error('Failed to update status:', xhr.responseText);
                // Revert checkbox if update fails to keep UI in sync
                $(this).prop('checked', !activeState);
            }
        });
    });
});

2. Complete Controller Method

Here's how to finish your Updatecourierstat function (assuming you're using a Courier model):

use App\Models\Courier;
use Illuminate\Http\Request;

public function Updatecourierstat(Request $request, $id)
{
    // Validate the incoming request data
    $request->validate([
        'active' => 'required|boolean'
    ]);

    // Find the courier and update the active column
    $courier = Courier::findOrFail($id);
    $courier->active = $request->input('active');
    $courier->save();

    // Return a JSON response for the frontend
    return response()->json([
        'success' => true,
        'message' => 'Courier status updated',
        'active' => $courier->active
    ]);
}

3. Add the Route

Define this route in your routes/web.php (or api.php if using API routes):

// Web route (with CSRF protection)
Route::post('/couriers/{id}/update-status', [YourCourierController::class, 'Updatecourierstat'])->name('couriers.update-status');

// If using API routes, use PUT and include auth middleware if needed
// Route::put('/couriers/{id}/update-status', [YourCourierController::class, 'Updatecourierstat'])->middleware('auth:api');

4. Set Initial Checkbox State

Make sure the checkbox reflects the current active value when the page loads. Update your HTML to conditionally add the checked attribute:

<label class="switch">
    <input type="checkbox" data-name="active" data-id="{{ $courier->id }}" {{ $courier->active ? 'checked' : '' }}>
    <span class="slider round"></span>
</label>

Quick Notes:

  • Replace YourCourierController::class with your actual controller name.
  • Ensure your Courier model includes active in the $fillable array to allow mass assignment:
    protected $fillable = ['active', /* other columns here */];
    
  • The error handling in JS reverts the checkbox state if the server update fails, keeping the UI consistent with the database.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:22:43