【问题标题】:Server gets a GET request with jQuery .ajax PATCH request服务器通过 jQuery .ajax PATCH 请求获取 GET 请求
【发布时间】:2021-05-27 08:11:03
【问题描述】:

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

问题:执行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!');
                });
            }
        }

【问题讨论】:

  • 这条路线和路线有区别吗,哪里可以正常运行?
  • 您在控制台中看到了吗,请求是作为 PATCH http 方法进行的吗? laravel还有另外一种方式,可以在get request_method=patch中添加额外的查询字符串
  • @Geshode 没有,至少我找不到。
  • @Girish 从控制台:PATCH http://.../prefix1/prefix2/update_field_ajax/73464352 500(内部服务器错误)
  • 好的,请看回复,会有服务器代码语法错误,不支持的方法错误代码是405。

标签: jquery ajax laravel


【解决方案1】:

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

将一个 URL 粘贴到浏览器搜索栏中总是会导致一个 GET 请求...傻我 :)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2017-10-18
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多