当前位置: 首页 > 知识库问答 >
问题:

Laravel更新数据库与ajax

墨财
2023-03-14

嘿,伙计们,我正在使用Laravel5.7,我正试图发出一个ajax post请求来更新我的数据库。ajax将基于checkbox on change函数发布。例如,如果我关闭复选框,它将发送一个请求,并将我的状态更新为myUser表中的Inactive。尝试之后,我出现了一个错误405(不允许使用方法)。有人注意到我做错了什么吗?抱歉,如果我的代码中有一些错误的代码或语法,因为我对Ajax非常陌生。任何帮助都将不胜感激。

AJAX

$(document).ready(function(){
    $.ajax({
        type:'get',
        url:'{!!URL::to('findStatus')!!}',
        success:function(data){
            for(var i=0;i<data.length;i++){

                var checkBox = document.getElementById('switch-'+data[i].u_id);

                console.log(checkBox);

                if(data[i].status == "Active"){
                    $('#switch-'+data[i].u_id).prop('checked',true);
                }

                else if(data[i].status == "Inactive")
                {
                    $('#switch-'+data[i].u_id).prop('checked',false);
                } 


                $('#switch-'+data[i].u_id).change(function(){
                    $.ajax({
                        type: "POST",
                        url : '{!!URL::to('admin/{admin}')!!}',
                        success:function(data){
                            console.log(data);
                        }
                    });
                });
            }
        },
        error:function(data){
            console.log('ERROR');
        }
    });
});

路线

Route::resource('admin','AdminController');  << I'm using the update method from the resource controller

控制器

public function update(Request $request, $id)
{
    $user = User::find($id);
    if($user->status == "Active"){
        $user->status = "Inactive";
        $user->save();
    }else{
        $user->status = "Active";
        $user->save();
    }
    return response()->json($user);
}

类型

{!!Form::open(array('action'=>['AdminController@update',$item->u_id],'method'=>'POST','id'=>'update'))!!}
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <input type="hidden" name="u_id" id="u_id" value="{{$item->u_id}}">
    <label class="custom-control custom-checkbox">
        <input type="checkbox" id="switch-{{$item->u_id}}" class="custom-control-input">
        <span class="custom-control-indicator"></span>
    </label>
    {{-- <button class="btn btn-primary">Update</button> --}}
{{Form::hidden('_method','PUT')}}
{!!Form::close()!!}

使现代化

我已经设法通过target.id获取id并将其与-拆分,将u_id传递给我的帖子请求。这不是最优雅的方式,但它是有效的。但现在我得到了一个错误

邮递http://manageme.test/admin/{2} 500(内部服务器错误)

以下是我在代码中更新的内容。

$('#switch-'+data[i].u_id).change(function(e){

    console.log(e.target.id);

    var s = e.target.id;
    var split = s.split('-')[1];

    $.ajax({
        type: "POST",
        url: `{!!url('admin/')!!}/{${split}}`,
        data: { _token: "{{ csrf_token() }}", _method: "PUT" },
        success:function(data){
            console.log(data);
        }
    }); 
});

这些在我的更新控制器内

public function update(Request $request, $id)
{
    $user = User::find($id);
    if($user->status == "Active"){
        $user->status = "Inactive";
        $user->save();
    }else{
        $user->status = "Active";
        $user->save();
    }
    return response()->json($user);
}

我还查看了开发工具的网络选项卡内的错误laravel的错误消息是消息:试图获得非对象的属性'状态'。我认为它在更新方法中找不到任何$user

共有2个答案

龙嘉誉
2023-03-14

解决方案

我设法解决了这个问题,问题来自试图传递用户的u\u id并查找用户数据的路径。因此,我没有在里面输入url,而是创建了一个变量来同时传递路由和u_id。这是密码

AJAX

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});


$.ajax({
    type:'get',
    url:'{!!url('findStatus')!!}',
    success:function(data){
        for(var i=0;i<data.length;i++){

            var checkBox = document.getElementById('switch-'+data[i].u_id);


            if(data[i].status == "Active"){
                $('#switch-'+data[i].u_id).prop('checked',true);
            }

            else if(data[i].status == "Inactive")
            {
                $('#switch-'+data[i].u_id).prop('checked',false);
            } 


            $('#switch-'+data[i].u_id).change(function(e){
                var s = e.target.id;
                var split = s.split('-')[1];
                var url = '{{route('admin.update','split')}}';

                $.ajax({
                    type: 'POST',
                    url: url,
                    data: { _token: "{{ csrf_token() }}", _method: "PUT" ,u_id: split},
                    success: function(data) {
                        console.log(data['message']);
                    }
                });
            });
        }
    },
    error:function(data){
        console.log('ERROR');
    }
});

更新方法

public function update(Request $request, $id)
{
    $user = User::find($request['u_id']);

    if($user->status == "Active")
    {
        $user->status = "Inactive";
        $user->save();
        return response()->json(['message' => 'Update to Inactive']);
    }else{
        $user->status = "Active";
        $user->save();
        return response()->json(['message' => 'Update to Active']);
    }       
}

别忘了在csrf令牌的文档头上添加meta标记

 <meta name="csrf-token" content="{{ csrf_token() }}">
孟跃
2023-03-14

而不是:“{!!URL::to('admin/{admin}')!!}”写:`{!!url('admin/')!!}/${data[i].u_id}`并将_令牌和_方法参数添加到ajax数据中,然后这样编写:

  $(document).ready(function () {
  $.ajax({
    type: 'get',
    url: '{!!url('findStatus')!!}',
    success: function (data) {
      data.forEach(d => {
        console.log(d);
        if (d.status == "Active") {
          $(`#switch-${d.u_id}`).prop('checked', true);
        }
        else if (d.status == "Inactive") {
          $(`#switch-${d.u_id}`).prop('checked', false);
        }
        $(`#switch-${d.u_id}`).change(function () {
          console.log(d);
          //changed###########
          $.ajax({
            type: 'POST',
            url: `{!!url('admin/')!!}/${d.u_id}`,
            data: { _token: "{{ csrf_token() }}", _method: "PUT" },
            success: function (data) {
              console.log(data);
            }
          });
          //###################
        });
      });
    },
    error: function (data) {
      console.log('ERROR');
    }
  });
});
 类似资料:
  • 如何使用复选框使用Ajax仅更新表的一列? 我想使用复选框并更新我的列,值将是或。如果选中值为,否则。 是我列的名称 是我的行id 控制器功能 不知道怎么处理这个零件! 我的最新代码: 我的开关按钮未按预期工作,对于值打开,对于值关闭,开关始终处于关闭状态 问题是为"什么是PHP运算符"?"":"打电话来,他们是做什么的?"解释了我必须使用

  • 我有一个PHP laravel projekt,我需要添加一个字段到一个/多个模型(雄辩)。我在php方面没有太多的经验,以前从未尝试过laravel。 现在这个班看起来像这样 我想添加一个名为“level”的字符串字段,但我不知道如何操作。如果我先在MySQL中创建字段,然后更新模型,如果我更新模型,然后Laravel为我更新MySQL? 我期待着听到我能做什么:)

  • 全部的 只是想看看用表单中提交的数据更新数据库行的最佳选项是什么。我理解Laravel更新查询生成器,但是我在如何获取表单数据,然后执行该查询方面遇到了困难。相对较新的Laravel:)这是我想出的,只是从我的PHP经验和逻辑: 我曾试图将查询放入一个函数中,然后让表单操作成为函数: 正如我所说,主要问题是试图让命名的表单对象成为更新行的对象。我有两个文本输入字段,分别命名为“body”和“not

  • 我想知道ehcache是否有办法检测数据库更新/插入(spring/java,hibernate web应用程序),并使用数据库中的当前(最新)数据刷新其缓存。如果没有,检测数据库更新的最佳方法是什么,以保持与缓存和数据库之间的数据同步?

  • 前言 在前两篇文章中,向大家介绍了定义关联关系的源码,还有基于关联关系的关联模型加载与查询的源码分析,本文开始介绍第三部分,如何利用关联关系来更新插入关联模型。 hasOne/hasMany/MorphOne/MorphMany 更新与插入 save 方法 正向的一对一、一对多关联保存方法用于对子模型设置外键值: public function save(Model $model) { $

  • 问题内容: 我正在使用()查找PostLikes表中的(PostId,UserId),如果找到该行,则用于生成delete指令并删除基础行,如果未找到该行,则用于生成insert命令并使用将该行插入表中。但是该行未插入数据库中的表中。这是我到目前为止所做的 和表 PostLikes(LikeId,PostId,UserId) 问题答案: 有几个问题: 您正在寻找重复使用相同的命令,这两个检测行是否