jQuery-Tabledit 抛出 MethodNotAllowedHttpException

Posted

技术标签:

【中文标题】jQuery-Tabledit 抛出 MethodNotAllowedHttpException【英文标题】:jQuery-Tabledit throws MethodNotAllowedHttpException 【发布时间】:2019-03-12 05:19:40 【问题描述】:

我正在尝试实现 jQuery-Tabledit 插件来处理内联表字段编辑。问题是它没有向控制器发送数据(传递参数),而且它抛出了一个错误 MethodNotAllowedHttpException “No message”。我是javascripts的新手,所以请描述我做错了什么。 这是我的控制器代码(首先我想显示脚本发送的参数):

public function quantityUpdate(Request $request)    
        dd($request->all());
    

这是我的路线:

Route::post('quantityUpdate', ['as' => 'quantityUpdate', 'uses' => 'QuantityController@quantityUpdate']);

查看文件中的脚本:

<script src=" asset('js/jquery.tabledit.js') "></script>
    <script type="text/javascript">
        $(document).ready(function() 
            $.ajaxSetup(
                headers: 
                    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
                
            );
            $('#products_table').Tabledit(
                url: 'route('quantityUpdate')',             
                columns: 
                    identifier: [0, 'id'],
                    editable: [[4, 'quantity']]
                ,
                editButton: false,
                deleteButton: false,
                saveButton: false,
                restoreButton: false,
                onSuccess: function(data, textStatus, jqXHR) 

                ,
                onFail: function(jqXHR, textStatus, errorThrown) 

                ,
                onAjax: function(action, serialize) 

                    console.log("on Ajax");
                    console.log("action : ", action);
                    console.log("data : ", serialize);
                
            );
        );

还有我的桌子:

<table class="table table-hover datatable" id="products_table">
                    <thead>
                    <tr>
                        <th>#</th>
                        <th>Name</th>
                        <th>Quantity</th>
                    </tr>
                    </thead>
                    <tbody>
                    @foreach($items as $item)
                        <tr>
                            <td> $item->id </td>
                            <td> $item->name </td>
                            <td id="quantity"> $item->quantity </td>
                        </tr>
                    @endforeach
                    </tbody>
                </table>

控制台输出:

on Ajax
action :  edit
data :  id=5&quantity=111140&action=edit
ReferenceError: exception is not defined

感谢您的帮助! :)

【问题讨论】:

你的控制台输出是什么样的? @Polaris 我已经编辑了我的帖子并添加了它:) 将您的路由方法更改为“get”--“Route::get”并反馈。 @Polaris 我收到错误 405,在网络控制台中我看到该脚本正在通过邮寄方式发送数据,即使我已经更改了获取路径:/ 我已经发布了一个我认为可能有用的答案。 【参考方案1】:

试试这个。

将路由改写为:

Route::post('/quantityUpdate', 'QuantityController@quantityUpdate');

在您的视图文件脚本中,更改为以下内容:

$('#products_table').Tabledit( 
url: '/quantityUpdate', 
columns:  
identifier: [0, 'id'], 
editable: [[4, 'quantity']] 
, 

onSuccess: function(data, textStatus, jqXHR)  
console.log(data); 
, 
onFail: function(jqXHR, textStatus, errorThrown)  

, 
onAjax: function(action, serialize)  

console.log("on Ajax"); 
console.log("action : ", action); 
console.log("data : ", serialize); 
 
);

在您的 VerifyCsrfToken.php 文件中:

protected $except = [
        '/quantityUpdate'
    ];

最后,在您的 quantityUpdate 控制器中,将代码更改为:

\Log::info($request->all());

这应该可行。

【讨论】:

MethodNotAllowedHttpException No messageNone sent parameters 当我想在开发工具的网络选项卡中检查 xhr 时。 对于 $request->method() 输出,laravel 日志说明了什么? 是的,好的,所以它正在使用 POST。我相信错误是因为 TableEdit 将信息发布为 JSON 而不是应用程序/表单 URL 编码。打开 VerifyCsrfToken.php 并将“/quantityUpdate”添加到 $protected 数组。然后让我知道这是否修复了 MethodNotAllowedHttpException 错误。然后将这个添加到Controller中,看看它是否输出JSON - dd(json_decode($request->getContent(), true)); 我已经编辑了我的答案。我认为这应该有效。我不认为 ajax 正在使用 CSRF 令牌,这就是发生方法不允许异常的原因。所以我们需要在VerifyCsrfToken.php文件中添加异常 让我们continue this discussion in chat。

以上是关于jQuery-Tabledit 抛出 MethodNotAllowedHttpException的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery-Tabledit 和 Laravel 更新表格行

单击 jquery-tabledit 中的编辑按钮时如何启用选择框?

单击 jquery-tabledit 中的编辑按钮时如何启用下拉选择框?

好图案? <X extends Exception> ... method() 抛出 X

捕获在不同线程中抛出的异常

异常处理——捕获并抛出