【问题标题】:Live search in laravel using AJAX使用 AJAX 在 laravel 中进行实时搜索
【发布时间】:2017-06-12 11:21:43
【问题描述】:

我希望用户能够在任何页面上搜索和显示结果。

搜索框在导航栏中是这样的:

<form action="/search" method="get" autocomplete="off" class="navbar-form navbar-left">
    <div class="form-group">
        <input type="text" class="form-control" id="search_text" onkeyup="search_data(this.value, 'result'); placeholder="Search"></div>
        <div id="result">
            @include('results')
        </div>
    </div>
</form>

JQuery/AJAX:

function search_data(search_value) {
    $.ajax({
        url: '/searching/' + search_value,
        method: 'GET'
    }).done(function(response){
        $('#results').html(response); // put the returning html in the 'results' div
    });
}

控制器:

public function search() {
    $search_text = $_GET['text'];
    if ($search_text==NULL) {
        $data= Business::all();
    } else {
        $data=Business::where('name','LIKE', '%'.$search_text.'%')->get();
    }
    return view('results')->with('results',$data);
}

路线:

Route::post('/searching', 'SearchController@search');

Results.blade.php

<table style="width:100%">
    <tr>
        <th>Name</th>
        <th>Logo</th>
    </tr>
    @foreach( $results as $business )
    <tr>
        <td>{{ $business->logo }}</td>
        <td>{{ $business->name}}</td>
    </tr>
    @endforeach
</table>

这是我到目前为止所得到的,我收到了这个错误:

未定义变量:结果
(查看:C:\xampp\htdocs\laravel\resources\views\results.blade.php)
(查看:C:\xampp\htdocs\laravel\resources\views\results.blade.php)
(查看:C:\xampp\htdocs\laravel\resources\views\results.blade.php)

谁能帮助一个可怜的灵魂?

【问题讨论】:

    标签: jquery ajax laravel laravel-5 laravel-5.4


    【解决方案1】:

    您将结果视图包含在表单刀片中,其中结果视图中的 results 变量最初不可用。您可以改为在结果视图中进行检查,以确保仅在数据可用时循环遍历集合

    <table style="width:100%">
        <tr>
            <th>Name</th>
            <th>Logo</th>
        </tr>
        @if (isset($results) && count($results) > 0)
        @foreach( $results as $business )
        <tr>
            <td>{{ $business->logo }}</td>
            <td>{{ $business->name}}</td>
        </tr>
        @endforeach
        @endif
    </table>
    

    编辑

    您正在使用路由类型post 和ajax 方法作为get。你需要改变你的ajax方法

    功能搜索数据(搜索值){ $.ajax({ url: '/searching/' + search_value, 方法:'POST' }).done(函数(响应){ $('#results').html(响应); // 将返回的 html 放入 'results' div }); }

    并在您的控制器中访问该搜索文本

    公共功能搜索($搜索=空){ $search_text = $search; 如果($search_text==NULL){ $data=业务::all(); } 别的 { $data=Business::where('name','LIKE', '%'.$search_text.'%')->get(); } 返回视图('结果')->with('结果',$data); }

    【讨论】:

    • 显然在这里:
      有:Uncaught SyntaxError: Unexpected token }
    • 它实际上指向了那个div结果,js似乎很好
    • 你的form和results.blade.php好像很正常,没有bug,results.blade.php里面有没有其他代码
    • 在 onkeyup 之后缺少“这是导致它的原因 -.- 我没有找到 http,所以我的路由需要一个变量,它只是一个随机变量吗?
    • 您不是通过 ajax 请求发送 csrf 令牌,您也可以使用 url 之类的辅助方法来生成 url
    【解决方案2】:

    我不完全确定 ->with() 是如何工作的,但是您可以使用以下两个选项之一直接将数据添加到视图助手:

    return view('results', ['results' => $data]);
    

    或者

    return view('results', compact('data'));
    

    请注意,最后一个选项将在您的视图中创建一个具有 $data 值的变量 $data。

    【讨论】:

    • 它仍然说结果没有定义,事情是结果应该在搜索框中输入后返回,否则它当然是空的,因此没有定义
    【解决方案3】:
    <form action="/search" method="get" autocomplete="off" class="navbar-form navbar-left">
    <div class="form-group">
        <input type="text" class="form-control" name="search_text" id="search_text" onkeyup="search_data(this.value, 'result'); placeholder="Search"></div>
        <div id="result">
            @include('results')
        </div>
    </div>
    

    路线

     Route::get('/searching', 'SearchController@search');
    

    控制器

    public function search() {
    $search_text = $_GET['search_text'];
    if ($search_text==NULL) {
        $data= Business::all();
    } else {
        $data=Business::where('name','LIKE', '%'.$search_text.'%')->get();
    }
    return view('results')->with('results',$data);}
    

    Results.blade.php

    <table style="width:100%">
    <tr>
        <th>Name</th>
        <th>Logo</th>
    </tr>
    @if (isset($results) && count($results) > 0)
    @foreach( $results as $business )
    <tr>
        <td>{{ $business->logo }}</td>
        <td>{{ $business->name}}</td>
    </tr>
    @endforeach
    @endif
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签