提问者:小点点

Laravel-如何使用Ajax将数据从复选框按钮发送到控制器


我正在尝试有一个切换按钮(复选框)更改我的MySQL数据库中的一些数据。我本质上想有一个很好的管理站点,在其中我可以解锁用户到网站上的某些功能与一个很好的开/关开关。

一切似乎都设置正确,但我的控制器根本没有反应或被触发。

现在,我的视图中有一个工作切换按钮触发了一个javascript函数。在该javascript函数中,我已经设置了要传输到控制器的数据。

我还在JavaScript中设置了Ajax。很明显,Ajax的代码中有这一部分(如果您需要了解我的意思,请参阅我的代码),它表示“成功”或“错误”。在输入{{csrf_token()}}令牌之前,我总是在错误部分结束。然而,现在我总是在拨动我的按钮时进入“成功”部分。

现在我的问题是:尽管Ajax证实了它的成功,但实际上我的控制器中没有发生任何事情。我不知道如何改变这一点,因为没有任何错误代码,也。

这是我的纽扣

<input id = "company_{{$company->id}}" data-id="{{$company->id}}" onchange=myFunction({{$company->id}}) value = {{$company->permissionlevel}} class="toggle-class" type="checkbox" data-onstyle="success" data-offstyle="danger" data-toggle="toggle" data-on="Active" data-off="InActive" {{ $company->permissionlevel ? 'checked' : '' }}>

这是我的javascript(相关部分)

var test = 12; // A random variable for this example

        $.ajax({
            method: 'POST', // Type of response and matches what we said in the route
            url: 'home/update', // This is the url we gave in the route
            data: {'test' : test, _token: '{{csrf_token()}}'}, // a JSON object to send back
            success: function(response){ // What to do if we succeed
                console.log(response); 
                //alert("Ajax success");
            },
            error: function(jqXHR, textStatus, errorThrown) { // What to do if we fail
                console.log(JSON.stringify(jqXHR));
                console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
                //alert("Ajax error");
            }
        });

这是我的控制器函数(只是看看会发生什么)

public function update (Request $request)
    {

            //echo "This is a test";
            $data = $request->all(); // This will get all the request data.
            dd($data); // This will dump and die
            return $data;



        }   

路线

Route::post('/home/update', 'HomeController@update');

预期结果:控制器向我扔东西。目前,我想要的只是看看我的控制器是否对按钮的按下做出反应,或者我是否可以请求Ajax应该发送的数据。

实际结果:在我的控制方没有发生任何事情


共1个答案

匿名用户

我自己找到了解决办法。我基本上在我的控制器中添加了以下代码:

public function update (Request $request, $id, User $user)
{
$newPermLevel = $request->input('value');
    $override = (int) $newPermLevel;

    \DB::table('users')->where('id',$id)->update(array(
       'permissionlevel'=>$override,
     ));
}

但是,我需要在我的控制器的开头,就在名称空间后面添加这些小行:

use Illuminate\Http\Request;
use App\User;

只是为了完成,我将留下其他必要的代码在这里,以及任何人在需要更新他的数据库与切换按钮

这是我的路线

Route::post('/home/update/{id}', 'HomeController@update');

这是我的HTML基于按钮的当前状态,我做了一个if语句(使用刀片引擎)创建一个关闭或打开开关。按钮有一个值,本质上是当前数据库条目(在我的例子中,我想用1或0上下跳转)

null

@if ($company->permissionlevel == 0)
<div class="col-sm-5">
  <label class="switch">
  <input id = "company_{{$company->id}}" data-id="{{$company->id}}" onchange=myFunction({{$company->id}}) value = {{$company->permissionlevel}} class="toggle-class" type="checkbox" data-onstyle="success" data-offstyle="danger" data-toggle="toggle" data-on="Active" data-off="InActive" {{ $company->permissionlevel ? 'checked' : '' }}>
    <span class="slider round"></span>
   </label>
</div>
@endif @if ($company->permissionlevel == 1)
<div class="col-sm-5">
  <label class="switch">
  <input id = "company_{{$company->id}}" data-id="{{$company->id}}" onchange=myFunction({{$company->id}}) value = {{$company->permissionlevel}} class="toggle-class" type="checkbox" data-onstyle="success" data-offstyle="danger" data-toggle="toggle" data-on="Active" data-off="InActive" {{ $company->permissionlevel ? 'checked' : '' }}>
    <span class="slider round"></span>
    </label>
</div>
@endif