laravel 5 和 Ajax 从数据库中获取数据:
Posted
技术标签:
【中文标题】laravel 5 和 Ajax 从数据库中获取数据:【英文标题】:laravel 5 and Ajax get data from database: 【发布时间】:2015-06-17 13:57:06 【问题描述】:我的表格很简单:
Form::open(array('id' => 'frm'))
<div class="form-group">
!! Form::label('id','id:'); !!
!! Form::text('id',null,['class' => 'form-control']); !!
</div>
<div class="form-group">
!! Form::submit('Update',['class' => 'btn btn-primary form-control']); !!
!! Form::close() !!
我想将表单输入字段中的值发布到控制器,然后在控制器中对数据库运行查询以获取表单中的 id 值。最后,使用 ajax,显示 DB 查询的结果,如果没有结果,则显示一条消息提醒用户。
我试过这个:
<script>
$("document").ready(function()
$("#frm").submit(function(e)
e.preventDefault();
var customer = $("input[name=postal]").val();
$.ajax(
type: "POST",
url : "http://laravel.test/ajax",
data : dataString,
dataType : "json",
success : function(data)
, "json");
);
);//end of document ready function
</script>
我尝试了几种方法来获取控制器中的post
数据,但都没有成功。
---问题一:
当我尝试在路由中使用它时出现问题:
Route::post('ajax', function() // callback instead of controller method
$user = App\User::find(\Input::get('id');
return $user; // Eloquent will automatically cast the data to json
);
我收到 sintax 错误,在 (;) 的第二行
另外,我尝试在控制器中获取数据并打印它们:
if(Request::ajax())
$data = Input::all();
print_r($data);die;
ROUTES.php
Route::post('/',
['as' => 'first_form', 'uses' => 'TestController@find']);
Route::get('/', 'TestController@index');
Route::post('ajax', function() // callback instead of controller method
$user = App\User::find(\Input::get('id');
return $user; // Eloquent will automatically cast the data to json
);
功能:
public function ajax()
//
// Getting all post data
if(Request::ajax())
$data = Input::all();
print_r($data);die;
我发现了更多将数据从视图发送到控制器的方法,但甚至不想显示已发布的数据。我检查了fire-bug,发布请求中有发布值
【问题讨论】:
能否请您添加以下信息:您的routes.php
和您的完整控制器方法。谢谢
fyi,语法错误是因为缺少)
【参考方案1】:
看来您正在向 ajax 方法传递一个不存在的变量。尝试直接将表单数据传递给它,看看是否会产生任何结果,您可以使用serialize
方法:
$("#frm").submit(function(e)
e.preventDefault();
var form = $(this);
$.ajax(
type: "POST",
url : "http://laravel.test/ajax",
data : form.serialize(),
dataType : "json",
success : function(data)
if(data.length > 0)
console.log(data);
else
console.log('Nothing in the DB');
, "json");
);
ajax 调用现在包含console.log
,因此它将在控制台中输出返回给它的任何内容。
routes.php(示例)
Route::post('ajax', function() // callback instead of controller method
$user = App\User::find(\Input::get('id'));
return $user; // Eloquent will automatically cast the data to json
);
请记住,我只是将代码作为示例,因为您没有将控制器代码放在问题中。
编辑
我将制作一个适合您的非常简单的示例。我已经重新安装了 laravel 并对其进行了编码,它对我来说工作正常。请谨慎跟进。
app/Http/routes.php
<?php
// route for our form
Route::get('/', function()
return view('form');
);
// route for our ajax post request
Route::post('ajax', function()
// grab the id
$id = \Input::get('id');
// return it back to the user in json response
return response()->json([
'id' => 'The id is: ' . $id
]);
);
资源/视图/form.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Ajax Example</title>
</head>
<body>
!! Form::open(['url' => 'ajax', 'id' => 'myform']) !!
<div class="form-group">
!! Form::label('id','id:') !!
!! Form::text('id', null, ['class' => 'form-control']) !!
</div>
<div class="form-group">
!! Form::submit('Update',['class' => 'btn btn-primary form-control']); !!
</div>
!! Form::close() !!
<div id="response"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$("document").ready(function()
// variable with references to form and a div where we'll display the response
$form = $('#myform');
$response = $('#response');
$form.submit(function(e)
e.preventDefault();
$.ajax(
type: "POST",
url : $form.attr('action'), // get the form action
data : $form.serialize(), // get the form data serialized
dataType : "json",
success : function(data)
$response.html(data['id']); // on success spit out the data into response div
).fail(function(data)
// on an error show us a warning and write errors to console
var errors = data.responseJSON;
alert('an error occured, check the console (f12)');
console.log(errors);
);
);
);
</script>
</body>
</html>
【讨论】:
我在 conteoller 的 ajax2 函数中尝试这样的事情 // 获取所有发布数据 if(Request::ajax()) $data = Input::all();返回视图('proba.show',compact('data')); print_r($data);死; 请使用代码编辑您的问题。您评论中的代码存在一些问题。 1.不要为ajax请求返回view
,返回JSON响应,2.一旦你说return
你的脚本将停止运行,所以print_r
和die
永远不会像你说的那样被调用return view(...
已经。
终于! :) 一个问题:如果我现在想从数据库中获取一些数据,对于那个 id,我只是在 url 中:$form.attr('action'),在控制器中编写一个函数路由?
此代码:$form.attr('action')
获取表单 action
属性,因此在此处更新 url:!! Form::open(['url' => 'changeHere'
或者您可以在表单中执行路由:!! Form::open(array('route' => 'route.name')) !!
。然后在你的路由中指定指向一个控制器,而不是像我一样运行回调。那有意义吗?如果您需要更多帮助,请提出新问题或告诉我。以上是关于laravel 5 和 Ajax 从数据库中获取数据:的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.1 Ajax 从 Blade View 获取 html
Laravel 5:在路由中获取 ajax 数据并传递给控制器
在 Laravel 中使用 Ajax/jQuery 从数据库中获取数据