【问题标题】:Laravel 4: manipulating ajax data through controllerLaravel 4:通过控制器操作 ajax 数据
【发布时间】:2013-12-15 02:51:29
【问题描述】:

我是 Laravel 和 ajax 的新手。我正在尝试通过 ajax 从表单中获取数据,并通过同一个 ajax 调用控制器中的方法。控制器中的方法搜索数据库,然后返回由 ajax 处理的 json 响应(最后一部分我还在考虑,我还没有真正做到)。 让我告诉你我现在拥有的东西:

Routes.php:

Route::get('/', 'HomeController@getIndex');
Route::post('/', 'HomeController@postIndex');

家庭控制器:

public function getIndex()
{
    return View::make('index');
}

public function postIndex()
{
    $match = Input::get('search');
    $results = Customers::where('name', 'like', '%'.$match.'%')->get(); 
    return Response::json(array('results' => $results));
}

还有我的 index.blade.php 视图:

<script>
$(document).ready(function() {
    $('form#find').submit(function() {
        $.ajax({
            url : 'CustomerSearch/Public',
            type: 'post',
            dataType: 'json',
            data: $('form#find').serialize(),           
        });
        return false;
    });
}); 

和形式:

    {{ Form::open(array('url' => '', 'method' => 'POST', 'id' => 'find')) }}
    {{ Form::text('search', '', array('class' => 'search-query', 'placeholder' => 'Search')) }}
    {{ Form::submit('Submit', array('class' => 'btn btn-info')) }}
    {{ Form::close() }}

所以我应该从表单中获取数据,然后将其发送到控制器中的“postindex”方法,以便对其进行处理然后发回,对吗?除了我得到错误“找不到控制器方法[索引]”。当我实际上没有调用任何索引方法时,因为它们的名称都不同。 我是新手,如果不清楚,请见谅。

更新: 就像我在评论中所说的那样,我发现将路由组合成一个 route::controller 摆脱了我以前的问题,但不幸的是我仍然无法让 ajax 将数据发送到我的控制器。我没有收到任何错误,但 ajax 不会向控制器加载任何内容。知道我的 ajax 有什么问题吗?:

$(document).ready(function() {
    $('form#find').submit(function() {
        $.ajax({
            url : '{{URL::to('/')}}',
            type: "POST",
            dataType: 'json',
            data: { search: $('.search-query').val() },
            success: function(info){
                 console.log(info);
            }
        });
        return false;
    });
}); 

【问题讨论】:

  • 我自己想通了,现在我知道答案了,这是一个非常愚蠢的问题!对于那些这可能会有所帮助:这里的 laravel 文档中有一个 restful 控制器语法:laravel.com/docs/controllers#restful-controllers 基本上我需要将 routes.php 更改为:Route::controller('/', 'HomeController');
  • 说对了一半。您应该能够像显示的那样路由到特定的控制器操作(“Route::get('/', 'HomeController@getIndex');”)。这里可能发生了其他事情。

标签: javascript php jquery ajax laravel-4


【解决方案1】:

只需在您的控制器中使用:

return json_encode(array('key' => 'val'));

对于数据输入,我使用了一个非常适合我的 JQuery 插件。 Follow this link。 这是一个函数的样子:

function someName(){
    // A plugin is used for this function
    $('#form_id').ajaxForm({
        url: '/',
        type: 'post',
        dataType: 'json',
        success: function(response){
            alert(response.key);
        }
    });
}

以及对应的表格:

<form id="form_id">
    <!-- Put your fields here -->
    <input type="submit" onclick="someName()">
</form>

我建议你使用这种方法,它可能取决于插件,但最简单。当然,您可以使用.submit() 语句而不是将其绑定到 onclick 事件

【讨论】:

  • 感谢您的回复!我喜欢 jquery 插件,但不幸的是我似乎仍然无法开始工作。如果我可以在任何地方添加console.log,我可以看到问题在于我尝试发送数据时。看起来它无法转到我的控制器的 postIndex 方法。您认为这与我的 routes.php 或其他有关吗?
猜你喜欢
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2013-10-05
  • 2016-01-13
  • 2021-06-16
  • 1970-01-01
相关资源
最近更新 更多