服务器通过 jQuery .ajax PATCH 请求获取 GET 请求

时间:2021-05-27 08:11:03

标签: jquery ajax laravel

我搜索了很长时间,找到了很多答案,但没有对我有用的解决方案:(

问题:在做ajax PATCH请求时,服务器返回:
“该路由不支持GET方法。支持的方法:PATCH。”

我使用的是 Laravel 8,还有其他一些路线可以完美运行。

路线:

Route::prefix('prefix1')->name('prefix1.')->middleware(['auth', 'isUserActive'])->group(function ()
{
    Route::prefix('prefix2')->name('prefix2.')->group(function ()
    {
        Route::patch('/update_field_ajax/{ID}', [RelevantController::class, 'update_field_ajax'])->name('update_field_ajax');
    }
}

刀片视图:

<select id="elementID" name="elementNAME" onchange="relevantFunction()" data-update-url="{{ route('prefix1.prefix2.update_field_ajax', $ID)}}" data-field_ID="relevant_DB_field">
    <option value="0" {{ $prist_popust ? "" : "selected" }} disabled>Določite popust</option>
    <option value="0" {{ $prist_popust == "0" ? "selected" : "" }}>popust 0%</option>
    <option value="25" {{ $prist_popust == "25" ? "selected" : "" }}>popust 25%</option>
    <option value="50" {{ $prist_popust == "50" ? "selected" : "" }}>popust 50%</option>
    <option value="75" {{ $prist_popust == "75" ? "selected" : "" }}>popust 75%</option>
    <option value="100" {{ $prist_popust == "100" ? "selected" : "" }}>popust 100%</option>
</select>

JS代码:

        function relevantFunction() {
            var prist_strosek = {{ $prist_strosek }};
            var prist_popust = document.getElementById('prist_popust').value;
            var field_ID = document.getElementById('prist_popust').getAttribute('data-field_ID');
            var update_url = document.getElementById('prist_popust').getAttribute('data-update-url');
            prist_strosek = prist_strosek - (prist_strosek / 100 * prist_popust);
            $('#prist_znes').html(prist_strosek + ' €');

            UpdateDBField(update_url, prist_popust, field_ID);
        }

        function UpdateDBField(update_url, field_VAL, field_ID) {
            if (update_url!="") {
                auth_check();
                $.ajax({
                    url: update_url,
                    type: 'PATCH',
                    data: {fieldId: field_ID, fieldVal: field_VAL, _token: "{{ Session::token() }}", _method: "PATCH"},
                    success: function(result) {
                        if (result.status == "error") {
                            alert(result.text);
                        }
                    }
                }).fail(function () {
                    alert('Napaka pri komunikaciji s strežnikom!');
                });
            }
        }

1 个答案:

答案 0 :(得分:0)

所以,经过更多的故障排除后,我现在明白了我的方法的错误;

将 URL 粘贴到浏览器搜索栏中将始终导致 GET 请求...傻我:)

上面的代码按预期工作 - ajax PATCH 请求被转发到我的错误所在的控制器。
我认为问题出在 ajax/route 中,因为当我在 Web 浏览器中打开 POST URL(完全忘记了本质上是 GET 请求)以获取详细信息时,它给了我一个不同的错误 - 此路由不支持 GET 方法,我认为这是我最初的错误。