【问题标题】:Unable to pass ajax to controller function无法将 ajax 传递给控制器​​功能
【发布时间】:2017-02-24 06:57:24
【问题描述】:

我正在尝试在 laravel 中使用 ajax 更新我的数据库。当我单击按钮(切换按钮)时,它应该将数据库启用列从 1 更新为 0。

这是视图中编写的脚本

$(".toggle-btn").change(function() {
    var id = $(this).attr('name'); // $(this) refers to button that was clicked

    $.ajax({
        url: '/adminpanel/dviulaan/stt',
        method: "post",
        data: {'id' : id} ,
        dataType: "json",

      });
});

这是我的路线

    Route::post('adminpanel/dviulaan/stt', 'AdminDvAnnouncement@status');

这里是控制器功能

public function status()
{
    $id = Input::all();

 if (Request::ajax()) {
    DvAnnouncement::where('announcement_id', $id)->update(
        [
            'enable' => '0',
            'user_updated' => Auth::user()->id,
            'updated_at' => new DateTime,
        ]);
}

        $response = array(
            'status' => 'success',
            'msg' => 'Option created successfully',
        );

        return Response::json( $response );

}

当我单击按钮时,它会在控制台中显示以下错误

POST http://localhost/adminpanel/dviulaan/stt 500 (Internal Server Error)

请帮我找出错误。

我什至改变了控制器方法如下

public function status(Request $request)
    {
        $id = Input::get('id');

     if (Request::ajax()) {
        DvAnnouncement::where('announcement_id', $id)->update(
            [
                'enable' => '0',
                'user_updated' => Auth::user()->id,
                'updated_at' => new DateTime,
            ]);
    }

            $response = array(
                'status' => 'success',
                'msg' => 'Option created successfully',
            );

            return Response::json( $response );

    }

【问题讨论】:

  • 这意味着你的 PHP 失败了。查看服务器上的错误日志以获取更多信息。
  • 我很困惑。除了这个,一切都很好。
  • 如果您阅读服务器的错误日志,您会变得不那么困惑。 ¯\_(ツ)_/¯
  • 您只发布了错误的最后一行,理想情况下我们需要第一行!
  • [2016-10-15 00:06:56] local.ERROR: C:\xampp\htdocs\adducity\vendor\laravel\framework\src\ 中的异常 'Illuminate\Session\TokenMismatchException' Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:67

标签: javascript php jquery ajax laravel-5.2


【解决方案1】:

$id = Input::all(); => $id = Input::get('id');

UPD在日志之后

包含在头中

<meta name="csrf-token" content="{!! csrf_token() !!}" />

然后改变功能

$(".toggle-btn").change(function() {
  var id = $(this).attr('name'); // $(this) refers to button that was clicked

  $.ajax({
    url: '/adminpanel/dviulaan/stt',
    method: "post",
    data: {'id' : id, '_token': $('meta[name="csrf-token"]').attr('content')} ,
    dataType: "json",

  });
});

【讨论】:

  • 哦。那是一个错误。我纠正了它。但它仍然给出相同的错误消息
  • 查看目录 storage/logs 中的最后一个日志文件,可能是数据库出错
  • Auth::user()-&gt;id 用户身份验证?因为如果不是,那么Auth::user()返回null就会报错
  • C:\xampp\htdocs\adducity\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(99): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object (Illuminate\Http\Request)) #41 C:\xampp\htdocs\adducity\public\index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #42 {主}
  • 哦,我忘了在开头插入use Response;。解决了问题谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2017-09-29
  • 1970-01-01
  • 2019-12-27
  • 2015-11-22
  • 1970-01-01
相关资源
最近更新 更多