【问题标题】:POST <target url> 419 (unknown status) - can't post data in LaravelPOST <target url> 419 (unknown status) - 无法在 Laravel 中发布数据
【发布时间】:2017-09-23 15:57:14
【问题描述】:

我正在尝试创建一个 DOM 事件,其中用户单击表格行的标题 (th) 单元格将从提供表格数据的数据库中删除相应的行。

此代码按预期的无框架工作,只需将包含行 ID 信息的 AJAX 从 index.php 发布到 delete.php,然后运行 ​​sql 查询。

但是,在将站点移至 Laravel 后,我遇到了错误:

POST http://sandbox.app/delete 419 (unknown status)

负责附加删除事件并通过 AJAX 发布 id 的 JavaScript 片段:

    function attachDelete() {
        $("#mainTable tbody tr th").on("click", function(e){
            console.log(e.target.innerText + " was clicked");
            var token = $('meta[name="csrf-token"]').attr('content');
            var id_to_delete = e.target.innerText;
            $.ajax({
                headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
                type: 'POST',
                dataType: 'text',
                url: 'delete',
                data: { 
                    'id_to_delete': id_to_delete,
                    "_method": 'POST',
                    "_token": token 
                },
                success: function () {alert("Deleted!"); },
                failure: function() {alert("Error!");}
            });
        });
    }
    attachDelete();

console.log(e.target.innerText + " was clicked"); 熄灭。

但是,success / error 消息不会出现。

直接转到http://sandbox.app/delete 会弹出一个带有大量文本的 Laravel 错误窗口,并突出显示这部分:

 protected function methodNotAllowed(array $others)
    {
        throw new MethodNotAllowedHttpException($others);
    }

在阅读 StackOverflow 上相关问题的答案后,我添加了令牌变量。这没有帮助。

如果重要的话,路线:

Route::post('/delete', 'TasksController@delete');

控制器:

class TaskController extends Controller
{
    public function delete() 
    {
        include 'config.php';

        $stmt = $pdo->prepare('DELETE FROM food WHERE id = :id');
        $stmt->execute(['id' => $_POST['id_to_delete']]);
    }

}

delete() 中的代码过去只是旧的、无框架的站点中的 delete.php 文件的内容,一切正常。

我已经尝试通过创建一个 delete.php 视图(与 delete() 函数具有相同的代码)在没有控制器的情况下执行此操作。但这并没有什么不同:

Route::post('/delete', function () {
    return view('delete');
});

【问题讨论】:

    标签: javascript php jquery ajax laravel-5


    【解决方案1】:

    好吧,看来您是在后端与 POST 通信。所以,你应该在 api.php 而不是 web.php

    上配置你的路由

    将您的路线与控制器关联

    Route::post('/delete', 'TasksController@delete');
    

    在 api.php 文件中。

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 2019-10-22
      • 2020-09-17
      • 2018-03-10
      • 2014-03-02
      • 2016-06-04
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多