我搜索了很长时间,找到了很多答案,但没有对我有用的解决方案:(
问题:在做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!');
});
}
}
答案 0 :(得分:0)
所以,经过更多的故障排除后,我现在明白了我的方法的错误;
将 URL 粘贴到浏览器搜索栏中将始终导致 GET 请求...傻我:)
上面的代码按预期工作 - ajax PATCH 请求被转发到我的错误所在的控制器。
我认为问题出在 ajax/route 中,因为当我在 Web 浏览器中打开 POST URL(完全忘记了本质上是 GET 请求)以获取详细信息时,它给了我一个不同的错误 - 此路由不支持 GET 方法,我认为这是我最初的错误。