PATCH AJAX 在 Laravel 中请求

PATCH AJAX Request in Laravel

是否可以向 laravel 发出 AJAX PATCH 请求,或者我是否仅限于 POST? Laravel 在输入隐藏字段中使用 PATCH,但是,我没有使用表单元素——只是在单击时应部分更新记录的按钮(通过 AJAX 请求)。

这条路线看起来如何?

路由文件

Route::patch('questions/{id}', 'QuestionController@update')->before('admin');

我不确定laravel路由是否支持PATCH。

控制器

public function update($id) {
    if (Request::ajax() && Request::isMethod('patch')) {
        //partially update record here
    }
}

JS

$('div#question_preview <some button selector>').click(function (event) {
    $.ajax({
        url: 'questions/'+question_id,
        type: 'PATCH',
        data: {status: 'some status'}
    });
});

我只是想弄清楚,谢谢!

是的,有可能试试

在你的JavaScript

$('#div#question_preview <some button selector>').click(function() {
        $.ajax({
                url: 'questions/'+question_id,
                type: 'PATCH',
                data: {status: <SOME VALUE I WANT>, _method: "PATCH"},
                success: function(res) {

                }
        });
});

在你的路线上

Route::patch('questions/{id}', 'QuestionController@update')->before('admin');

在您的 QuestionController 控制器的更新方法中

dd(Request::method());

您会看到类似

的回复
string(5) "PATCH"

Laravel doc 上阅读有关请求信息的更多信息。

有可能!

您应该需要在名为 _method 的表单请求中提供一个额外参数,其值为 PATCH.

JS

$('div#question_preview <some button selector>').click(function (event) {
    $.ajax({
        url: 'questions/'+question_id,
        type: 'PATCH',
        data: {status: 'some status',_method: 'PATCH'}
    });
});

您可以在视图文件中提供值为 PATCH 的隐藏输入,以提高可读性 HTML

<input type="hidden" name="_method" value="PATCH">

如果您使用的是 FormData,则需要将请求发送为 POST。 Laravel 应用程序将自动将其作为 PATCH 请求获取,因为您包含了 @method('PATCH')。所以你的路线和方法将被触发。

带有 FormData 的 JS

$('div#question_preview <some button selector>').click(function (event) {
    let form_data= new FormData();
    form_data.append('status','some status');
    form_data.append('_method','PATCH');
    $.ajax({
        url: 'questions/'+question_id,
        type: 'POST',
        data: form_data
    });
});