我正在学习基于Model,View,Controller范例的Laravel
PHP框架.我一直试图将AJAX融入我的简单入门应用程序……一个电话呼叫记录器.这是我通常放弃的地方.但是我拒绝了!
所以我有我的Phonecall模型:
class Phonecall extends Eloquent { // Creates an instance of the database object }
这是我的电话呼叫表:
MysqL> desc phonecalls; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | who | varchar(200) | NO | | NULL | | | what | varchar(200) | NO | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | | initiator | varchar(200) | NO | | NULL | | | info | text | NO | | NULL | | +------------+------------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec)
我的视图列出了当前数据库中的所有呼叫(按谁和什么):
<!doctype html> <html> <head> <title>Title</title> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"> </script> </head> <body> <h1>Welcome</h1> <p>Here's a list of recent phonecalls</p> <ul class="call-list"> @foreach($phonecalls as $call) <li>{{ $call->who }} - {{ $call->what }} - <a href="phonecalls/show/{{ $call->id }}">Show</a> | {{ HTML::link('phonecalls/delete/'.$call->id,'Delete') }} | {{ HTML::link('phonecalls/update/'.$call->id,'Update') }} </li> </ul> {{-- Placeholder for AJAX content --}} <div id="call-info"> </div> </body> </html>
这是我的简单控制器:
class Phonecalls_Controller extends Base_Controller { // Use $this within a method the same way you // would use the object name outside of the class public function get_index() { $phonecalls = Phonecall::all(); return View::make('phonecalls.index')->with('phonecalls',$phonecalls); } // ************************************ // DISPLAY CALL INFO public function get_show($call_id) { $call = Phonecall::find($call_id); // WHAT GOES HERE? }
<div id="call-info"> </div>
视图中的标签.
更新:
这是它做了什么……
我的get_show()方法
// ************************************ // SHOW CALL INFO public function get_show($call_id) { $call = Phonecall::find($call_id); return $call->info; }
我的Javascript
//************************************ // Phonecall AJAX Example //************************************ $(document).ready(function() { $('.call-list > li > a').click(function(e) { // e=event e.preventDefault(); var id = $(this).attr('id'); $.get(BASE+'/phonecalls/show/'+id,function(data) { $("#call-info").html(data); }) });
解决方法
这可以通过多种方式完成.
首先,你可以这样做:
public function get_show($call_id) { $call = Phonecall::find($call_id); return View::make('phonecalls.single')->with('phonecal',$call); }
在这种情况下,您需要为单个电话呼叫创建模板并将其放入phonecalls文件夹中.
另一个选择是从Laravel应用程序返回JSON响应:
public function get_show($call_id) { $call = Phonecall::find($call_id)->first(); return Response::eloquent($call); }
另一种选择是使用javascript MVC框架来轻松获取/更新AJAX数据,例如Backbone JS或Angular JS可以做到这一点.
无论哪种方式,如果您想要执行AJAX数据,您需要构建一个API,以便在常规站点和AJAX数据后端之间进行分离.
这是我的博客文章,其中包含有关如何完成此操作的大量详细信息:
http://maxoffsky.com/code-blog/building-restful-api-in-laravel-start-here/
此外,在Laravel中对AJAX的一个很好的介绍是Dayle Rees的Code Happy,AJAX内容章节:
codehappy.daylerees.com/ajax-content
如果您有更多问题,请告诉我,如果您觉得我有帮助,请批准此评论.谢谢!
更新:
要从控制器(或Laravel路由)实际加载内容,您需要使用jQuery ajax,GET(加载数据)或POST(发布表单结果)
这是一个例子:
$('#get-info').click(function(e) { // e=event e.preventDefault(); var BASE = "<?PHP echo URL::base(); ?>"; // attempt to GET the new content $.get(BASE+'phonecalls/show/2',function(data) { $('#content').html(data); });