PUT 方法在表单中不起作用会引发错误

Posted

技术标签:

【中文标题】PUT 方法在表单中不起作用会引发错误【英文标题】:PUT method not working in form throws an error 【发布时间】:2020-01-16 16:01:37 【问题描述】:

我使用相同的表单来插入、搜索和更新数据。对于插入,我使用 Laravel 的 store 方法并使用 Ajax 进行搜索和更新。

文本字段的记录插入和搜索工作正常,但更新记录时会引发错误“此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT。” p>

在表单中添加刀片指令 @method('PUT') 仍然显示相同的错误。

路线:

Route::get('search-data/sid?', 'DataController@dataSearch');
Route::put('update-data/sid?', 'DataController@dataUpdate');

控制器:

use App\exModel;

public function dataSearch($sid)
    
        $search = exModel::find($sid);
        return Response::json($search);
    
    public function dataUpdate(Request $request, $sid)
    
        $var = exModel::find($sid);
        $var->name = $request->name;
        $var->save();
    return Response::json($var);
    

脚本:

//Search
  $(document).ready(function () 
  $('#search').on('keydown', function(e) 
    if(e.which == 13)
    var sid = $("#search").val();
      $.ajax(
                  url: ' URL::to('search-data/')'+"/"+ sid,
                  type: "Get",
                  dataType: 'json',
                   success: function(response) 
                    $('#Getname').val(response.name);
                 
                );
            
    );
     );
//Update
$("#btn-update").click(function (e) 
    $.ajaxSetup(
        headers: 
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        
    )
    e.preventDefault();
    var formData = 
        name: $('#Getname').val(),
    
    var sid = $('#search').val();
    console.log(formData);
    $.ajax(
        url: ' URL::to('update-data/')'+"/"+ sid,
        type: 'PUT',
        data: formData,
        dataType: 'json',
         success: function (response) 
            console.log(response);
            $('#Getname').val(response.name);
        ,
    );
);

查看:

<form method="POST" action=" route('data.store') ">
  @method('PUT')
  @csrf
  <div>
    <label>ID No</label>
    <input type="text" id="search" class="form-control">
  </div>
  <div>
    <label>Name</label>
    <input type="text" name="name" id="Getname" class="form-control">
  </div>
<div>
    <button class="btn btn-success" input type="button" onclick="this.form.submit()">Save</button>
</div>
  <div>
    <button class="btn btn-info" type="button" id="btn-update">Update Record
    </button>
  </div>
</form>

【问题讨论】:

我看到了$("#btn-update"),我看到了id="btn-save"。你确定你发布了相关代码? 是的,忘记更改之前btn保存的id名称,请立即查看 看看这里:***.com/questions/28143674/… 使用 PUT 方法。 @Daniel 我已经在我的表单中添加了方法刀片指令,请检查 好吧,我看它告诉我use POST with formData。 PUT 不受支持,应该像您一样实施。尝试序列化。这边:***.com/questions/35375468/… 【参考方案1】:

参考来源https://laracasts.com/discuss/channels/laravel/ajax-formdata-and-put-fails

使用 POST 请求配置对后端的 Ajax 调用,并将 PUT 方法作为变量添加到数据集。

$ajax(
    type: 'POST'
    url: "/path/to/route",
    data: name: $('#Getname').val(), '_method':'PUT',
    success: function(data) 
        console.log(data);    
    
);

【讨论】:

不,在你的答案中更正如下,而不是method: POST,添加type: 'POST'并在数据回调中添加这个data = name: $('#Getname').val(), '_method':'PUT' 这很有趣。从jQuery docs(大约一半)开始,methodtype 是别名。【参考方案2】:

我不是 sur,但可能您在表单 post 方法中使用了 put 方法 bur,可能是冲突的。尝试使用 post 而不是 put

【讨论】:

我使用相同的表单,但保存和更新按钮不同,目前我正在更新记录,因此通过 Ajax 使用 PUT 方法也尝试了您的解决方案,但仍然没有运气。

以上是关于PUT 方法在表单中不起作用会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

HTTP Put 方法在 Spring Boot 中不起作用

LINQ 实体框架查询在 EF Core 中不起作用,引发异常

Stripe Checkout 在 Firefox 中不起作用

MeteorJs“loginWIthPassword”似乎在方法中不起作用

使用 PUT 请求发送 multipart/form-data 在 Laravel 中不起作用

ReactJS Array.push 函数在 setState 中不起作用