即使 url、路由器和控制器指向同一个地方,Laravel 和 Ajax 也会根据请求返回 404
Posted
技术标签:
【中文标题】即使 url、路由器和控制器指向同一个地方,Laravel 和 Ajax 也会根据请求返回 404【英文标题】:Laravel and Ajax returning 404 on request even though the url, router and controller are pointing to the same place 【发布时间】:2021-09-02 16:26:06 【问题描述】:正如您所见,一切都已正确路由,我还有其他功能可以执行类似的操作并且工作正常,但我不断收到此错误:
POST http://localhost:8000/apagados/4 404(未找到)
删除 http://localhost:8000/apagados/4 404(未找到)
//Buttons
<button id="'botRestaurarProjeto'.$apagado['id']" value="$apagado['id']" class="botRestaurarProjeto rounded bg-blue-300 text-white p-2">Restaurar</button>
<button id="'botEliminarProjeto'.$apagado['id']" value="$apagado['id']" class="botEliminarProjeto rounded bg-red-700 text-white p-2">Excluir</button>
<script>
$(document).on("click", ".botRestaurarProjeto", function ()
let id = $(this).val();
$.ajax(
method: 'POST',
url: "apagados/"+id,
data:
"id": id,
,
success: function(result)
location.reload();
,
error: function(jqXHR, testStatus, error)
// console.log(jqXHR.responseText);
console.log(testStatus);
console.log(error);
);
);
//AJAX
$(document).on("click", ".botEliminarProjeto", function ()
let id = $(this).val();
if(confirm("Deseja apagar definitivamente?") == true)
$.ajax(
method: 'DELETE',
url: "apagados/"+id,
data:
"id": id,
_method: 'DELETE'
,
success: function()
$("#lixo"+id).hide();
,
error: function(jqXHR, testStatus, error)
console.log(jqXHR.responseText);
);
);
</script>
//ProjetoController
public function eliminar($id)
$projeto = Projeto::find($id)->withTrashed();
$projeto->forceDelete();
public function restaurar($id)
$projeto = Projeto::find($id)->withTrashed();
$projeto->restore();
//Router
Route::delete('apagados', [ProjetoController::class, 'eliminar'])->name('posts.eliminar');
Route::post('apagados', [ProjetoController::class, 'restaurar'])->name('posts.restaurar');
【问题讨论】:
【参考方案1】:http://localhost:8000/apagados/4
不是您指定的有效路由:
Route::delete('apagados', [ProjetoController::class, 'eliminar'])->name('posts.eliminar');
Route::post('apagados', [ProjetoController::class, 'restaurar'])->name('posts.restaurar');
因此,有效的 URL 是 http://localhost:8000/apagados
。如果您希望它按预期工作,则必须将路线更改为:
Route::delete('apagados/id', [ProjetoController::class, 'eliminar'])->name('posts.eliminar');
Route::post('apagados/id', [ProjetoController::class, 'restaurar'])->name('posts.restaurar');
阅读更多关于Route
的信息。
【讨论】:
嘿,非常感谢您的回答,但现在我得到了这个:DELETE localhost:8000/apagados/4 500 (Internal Server Error) POST localhost:8000/apagados/6 500 (Internal Server Error) 即使 CSRF 令牌是正确的配置 所以,我的答案有效,将此答案标记为正确,并创建一个新问题,因为您真正的问题是您无法按预期使用此 URL。 500 与此更改无关,而是在您的控制器中。创建显示控制器和所有内容的新问题,我们将为您提供帮助! (我知道你在这里共享你的控制器,我没有看到任何错误,只需再次显示并添加更多信息,尝试在控制器中使用dd
助手或查看 Laravel 的日志)以上是关于即使 url、路由器和控制器指向同一个地方,Laravel 和 Ajax 也会根据请求返回 404的主要内容,如果未能解决你的问题,请参考以下文章
如何从 CakePHP 中的 URL 字符串获取连接的路由?
将指向外部 URL 的超文本链接点击重新路由到 Electron 应用程序以外的另一个浏览器