在 Laravel 中使用 Ajax 将数据插入 MySQL

Posted

技术标签:

【中文标题】在 Laravel 中使用 Ajax 将数据插入 MySQL【英文标题】:Insert data to MySQL with Ajax in Laravel 【发布时间】:2019-10-16 16:25:47 【问题描述】:

我有一个 JS 变量,它在我的刀片视图中存储一个 JSON 值,我想将它插入到 Laravel 项目中的 mysql 中。但是不知道怎么写才对。这是我在刀片视图中尝试过的:

<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(); //my JSON data 
  	
  	$.ajax(
  		type: 'POST',
  		url: '/saveToDatabase',
  		data: "mFormData":mFormData
  	).done(function (msg) 
  		alert("Data saved!");
  	);
  );
  
</script>

但是当我运行它时,出现错误提示:jquery.js:8630 POST http://localhost/saveToDatabase 404 (Not Found)。

我该如何解决这个问题?

非常感谢!

【问题讨论】:

你在routes/api.php中定义路由了吗? 我只在刀片视图中编写代码,所以我认为我可以在 web.php 中使用默认路由。我错了吗? 你用的是 Laravel 那你代码为什么要用mysqli_connect 这是我放在 xampp htdocs 文件夹中运行的 2 .php 文件。我只是为了让你了解我在做什么。我想在 Laravel 中这样做。 出现是因为laravel中的路由在web.php中没有定义。你在 web.php 中添加路由了吗? 【参考方案1】:

首先,在 .env 文件中输入您的数据库详细信息。

您需要使用两条路线。一个用于渲染刀片文件,另一个用于 api 请求。

在 routes/web.php 上,定义你的路由,

Route::get('/', function() return view('app'););

使用您的 html 代码在 resources/views/ 文件夹中创建 app.blade.php。

在 routes/api.php 上,像这样定义你的路由

Route::post('saveToDatabase','HomeController@saveToDb')

接下来,您需要在 HomeController 上创建 saveToDb 方法。

打开 App\Http\Controller\HomeController.php

创建一个新方法

public function saveToDb()

  // Database Insertion Code goes here


Laravel 为 POST 请求提供 CSRF 保护。因此,通过将其添加到 App\Http\Middleware\VerifyCSRFToken.php 中,将 Exception 添加到该路由中

  protected $except = [
        'api/*'
    ];

对于插入操作,我们可以借助模型来完成。

所以首先在 App\ 文件夹中创建 Form.php。

在其中,我们指定数据库的字段。

<?php

use Illuminate\Database\Eloquent\Model;

class Form extends Model

    protected $fillable = [
        "key", "data"
    ];

    protected $hidden = [];



接下来,我们可以使用这个模型向Form表中插入数据。

在顶部的 HomeController.php 中

use App\Form;
use Request;

现在我们可以更新我们之前编写的 saveToDb 函数。

public function saveToDb()

  // Request all the post data
  $req = Request::all();    
  // From that post data store key and data part to form table
  Form::create($req);

如果您在路由、控制器或模型方面有任何问题。参考 Laravel 官方文档:https://laravel.com/docs/5.8/routing

而且这个对于开始使用 laravel 也很有用。 https://laracasts.com/series/laravel-from-scratch-2018

【讨论】:

嗯,我应该在哪里写插入查询? 是的。代替模型,您可以像这样使用 $values = array('key' => 1,'data' => 'Dayle'); DB::table('form')->insert($values); 但我的 JSON 值存储在刀片视图中的 JS 变量中,即 var mFormData = formBuilder.actions.getData(); //JSON数据返回。我如何在查询中使用它? 当你写return $data;在控制器方法中。它将返回 json 数据。是否要将数据库中的数据返回到json? 也许你误解了我的问题。我编辑了我的帖子。我有一个 JS 变量来存储我的 JSON 值。现在我想将该 JSON 值插入到我的数据库中。我不需要从数据库返回数据。我像你说的那样在 .env 文件中配置并创建了模型和控制器。接下来我该怎么办?谢谢!【参考方案2】:

路线选择不正确。 http://localhost/saveToDatabase 找不到做某事

【讨论】:

是的。我认为是因为该网址在 web.php 中没有。但是我在刀片视图中只写了ajax,我没有任何控制器和功能,我不知道如何为此编写路由。 Jijin P 在上面说怎么做。记住在 laravel 中发布需要 CSRF。

以上是关于在 Laravel 中使用 Ajax 将数据插入 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 和 Ajax - 将数据插入表中总是刷新加载

如何使用 laravel 通过 jquery ajax 将表单值插入数据库?

在 laravel 中通过 ajax 提交简单的表单,之后,将新行插入到现有表中,其中包含来自提交表单的数据

如何使用带有id的ajax插入数据而不使用laravel中的表单

ajax成功后用数据调用另一个控制器后的Laravel

Ajax 发布到 Laravel 4 中的路由