首页 > 解决方案 > 在 Laravel 中使用 Ajax 时出现 500 内部服务器错误

问题描述

我正在尝试在我的刀片视图中使用 ajax 调用并将 ajax 数据发布到控制器以插入数据库。

这是我的ajax:

<!DOCTYPE html>
<html>
  <head>
      <title>FormBuilder Editor</title>
  
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
      <script src="https://formbuilder.online/assets/js/form-builder.min.js"></script>

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

  <body>
      <div id="fb-editor"></div>
  
      <div id="saveToDatabase">
        <button id="saveBtn" type="button">Save To Database</button>
      </div>
  </body>

  <script>
    	var formBuilder = $('#fb-editor').formBuilder();
  	
    	$("#saveBtn").click(function() {
    		var mFormData = formBuilder.actions.getData(); //JSON data return

        console.log(mFormData);
  	
    		$.ajax({
          headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          },
    			type: "POST",
    			url: "save",
    			data: {
            "mFormData":mFormData
          }
    		}).done(function (msg) {
    			alert("Data saved!" + msg);
    		});
    	});
    
  </script>
</html>

这是我的控制器:

public function saveToDb(Request $request) {

    $data = $request->all();

    if($data) {
        Form::insertData($data);
    }

    return view('welcome');
}

这是我在模型中的插入函数:

public function insertData($formData) {
    DB::EnableQueryLog();

    $sql = DB::table('form')->insert(['formKey' => 'testForm2', 'formData' => $formData]);

    return $sql;
}

当我单击按钮保存时,这是 Network XHR 中的错​​误: 在此处输入图像描述

我该如何解决这个问题?非常感谢!

标签: javascriptjqueryajaxlaravel

解决方案


您正在静态调用 inserData 。所以应该是

public static function insertData($formData) {
    DB::EnableQueryLog();

    $sql = DB::table('form')->insert(['formKey' => 'testForm2', 'formData' => $formData]);

    return $sql;
}

推荐阅读