4

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

我只是在寻找清晰度,谢谢!

4

2 回答 2

11

可以,可以试试

在你的 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 文档的请求信息。

于 2015-01-13T04:27:19.280 回答
1

这是可能的!

您应该需要在表单请求中提供一个额外的参数,称为_methodvalue 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')。因此,您的路线和方法将被触发。

带有表单数据的 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
    });
});
于 2021-08-23T14:22:52.820 回答