Laravel中的PATCH AJAX 请求

yjghlzjz  于 2023-04-22  发布在  其他
关注(0)|答案(2)|浏览(119)

是否可以向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
    }
}

JavaScript

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

rm5edbpk1#

是的,这是可能的。试试你的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文档中阅读更多关于请求信息的信息。

wpx232ag

wpx232ag2#

有可能!
您需要在表单请求中提供一个名为_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'}
    });
});

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

<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
    });
});

相关问题