【问题标题】:Laravel 4 Search Query with AjaxLaravel 4 使用 Ajax 进行搜索查询
【发布时间】:2014-06-30 05:56:12
【问题描述】:

我正在尝试为用户提供一个搜索选项来填写和搜索多个表格中的订单、佣金等,而无需重新加载页面。以前从未使用过 AJAX,所以如果有人能指出我哪里出错或帮助我完成这项工作,将不胜感激!现在,当我单击提交按钮时,除了收到 500(内部服务器错误)消息外,什么也没有发生。

这是我的观点(家):

 <div class="large-6 columns">
{{Form::open( array('route' => 'search', 'method' => 'post', 'id' => 'search_form'))}}      

        {{ Form::select('search_table',
                array(
                    'select'        => 'Search...',
                    'commissions'   => 'Search commissions',
                    'estimates'     => 'Search estimates',
                    'orders'        => 'Search orders',
                    'warranties'    => 'Search warranties',
        ), null, array('id' => 'search_table')) }}

        <div class="search_box" id="search_column_div">
            <!-- Search_column select goes here -->
        </div>

        <div id="search_input_div">
            <!-- Search_input text field goes here -->
        </div>

{{ Form::submit('Search', array('id' => 'search_button','class' => 'button expand radius search_button no_display'))}}
    {{ Form::close() }}
    </div>
    <div id="search_results_div">
    </div>
</div>

因为搜索有很多变量,但我不想让它占用很多空间,所以我让 JS 根据他们之前的选择插入查询的下一部分。因此,他们将从选择要搜索的表开始,然后是一列,然后他们将有一个输入字段来写他们正在搜索的确切内容。

JS(我的问题可能出在哪里):

$(document).ready(function($){
    $('#search_form').on('submit', function(){
        $.post(
            $(this).prop('action'),{
                "search_table":     $('#search_table').val(),
                "search_column":    $('#search_column').val(),
                "search_input":     $('#search_input').val(),
            },
            function(data){
                $('#search_results_div').html(data);
            },
            'json'
        );
        return false;
        });
});

控制器:

 public function searchPost(){
        $search_table   = Input::get('search_table');
        $search_column  = Input::get('search_column');
        $search_input   = Input::get('search_input');

        $search = DB::table($search_table)->where($search_column, 'LIKE', "%{$search_input}%")->get();
        return $search;
    }

还有路线:

/*Search Page for Ajax*/
Route::post('/search', array(
    'as'    => 'search',
    'uses'  => 'HomeController@searchPost'
));

再次感谢您的宝贵时间和帮助!请随时就最佳做法提出建议!

【问题讨论】:

  • 您发布的路由正在侦听 GET 请求,但您正在发布 AJAX 请求。
  • 好点,更新了问题,但仍然收到 500 错误。

标签: javascript jquery mysql ajax laravel-4


【解决方案1】:

好吧,首先,您并没有说问题出在哪里,但只是查看该代码,您将 HomeController@searchPost 设置为您的 post 方法的操作,但您的搜索方法实际上是 @ 987654323@.

您还使用了错误的变量。您正在传递 search_tablesearch_columnsearch_input 作为 Javascript 中的键,但您正在尝试读取 table_searchedcolumn_searchedinput_searched - 所以所有这些变量将始终为空在您的服务器端代码中。

您的$search 查询也将始终失败。 '%LIKE%' 不是有效的 SQL - % 需要绕过搜索词。你真正想要的是:

$search = DB::table($search_table)->where($search_column, 'LIKE', "%{$search_input}%")->get();

尝试修复所有这些问题,看看它是否能解决您的问题 :)

【讨论】:

  • 感谢您为我清理了这么多东西。我做了你指出的更正,现在当我提交页面时不会崩溃,这是一个加号,但我收到“500(内部服务器错误)”消息。我知道这通常意味着页面无法弄清楚具体是什么的一般错误。有什么想法可以尝试下一步吗?
  • Laravel 崩溃时应该会给你一个非常详细的堆栈跟踪 - 你没有得到一个橙色和黑色的屏幕来详细说明错误的位置吗?
  • 通常我会这样做,现在当我单击提交按钮时什么都没有发生,除了在 Web 开发人员工具中我看到该错误消息。
  • 所以我猜上面的代码在技术上是正确的,不会导致页面中断,但没有按照我的意图去做,那就是去搜索一些东西并将它们放在“search_results_div” div。
  • 如果您使用 Chrome 的开发工具,您可以检查请求的内容。如果 Laravel 在 AJAX 请求中死掉,它会很聪明地返回错误的 JSON 表示。 cl.ly/image/0x1g1A132W2M
【解决方案2】:

看起来有几个问题。我看到您已经进行了一些更改,但还有一些问题需要解决。您的 AJAX 请求正在使用 POST 请求,但您的路由正在侦听 GET 请求。即使解决了这个问题,您也需要在返回结果之前对控制器和数据库查询进行某种错误处理或验证。之后,您需要查看如何处理 AJAX 请求返回的内容。

您收到的 500 错误意味着您的服务器端代码存在问题。很可能某些东西没有正确“连接”。如果您在获取详细的错误报告时遇到问题,请使用“console.log()”将通过 AJAX 返回的内容输出到开发控制台。从那里您可以调试问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多