在 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 提交简单的表单,之后,将新行插入到现有表中,其中包含来自提交表单的数据