在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题

Posted

技术标签:

【中文标题】在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题【英文标题】:Having problems to pass searched data from controller blade file using ajax in laravel 【发布时间】:2020-05-19 09:07:00 【问题描述】:

这是我在 Admin Controller 中的控制器方法,该方法接收搜索输入,但我在将输出数据传递到视图文件时遇到问题

public function action(Request $request)

    if($request->ajax())
    

        $students=Student::where('name','LIKE','%'.$request->search."%")->paginate(5);

        $data = $students->count();
        if($data > 0)
        
            $output=$students;

        
        else
           $output=$students;
        
        return view('search' compact('output'));

    


这是视图文件中的 ajax (search.blade.php)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">

    // $(document).on('keyup', '#search', function()
    $('#search').on('keyup',function()
        $value=$(this).val();
        $.ajax(
            type : 'get',
            url : 'route('search.action')',
            data:'search':$value,
            success:function(data)
                $('tbody').html(data);
            
        );

    )

</script>

<script type="text/javascript">
    $.ajaxSetup( headers:  'csrftoken' : ' csrf_token() '  );
</script>

这里是ajax路由

Route::get('/search/action', 'AdminController@action')->name('search.action');

【问题讨论】:

您是否遇到任何错误?如果是,请更新。 否,但没有返回数据 view() 不返回 HTML - 你需要 render() 它。 SO上有很多关于这个的问题。更常见且可能更好的方法是让您的控制器返回 data - 例如 JSON - 并让您的前端渲染它,例如遍历结果数组并创建 HTML 以插入 DOM。 这能回答你的问题吗? How can I return a view from an AJAX call in Laravel 5? 【参考方案1】:

更新下面的源代码。

AdminController.php

public function action(Request $request)
    
        if ($request->ajax()) 
            // Convert to lowercase after trim the searched text
            $search_text = strtolower(trim($request->search));
            $students = Student::where('name','LIKE','%'.$search_text."%")->paginate(5);
            $data = $students->count();
            $output = array();
            if ($data > 0) 
                $output = $students->toArray();
            
            // Return JSON response
            return response()->json($output);
        
    

search.blade.php

<input type="text" id="search">

<div id="studentlist">
    <table>
        <thead>
            <tr>
                <th>Id</th>
                <th>Name</th>
            </tr>
        </thead>
        <tbody>            
        </tbody>
    </table>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">

    $('#search').on('keyup',function()
        $value=$(this).val();
        $.ajax(
            type : 'get',
            url : 'route('search.action')',
            data:'search':$value,
            success:function(response)
                var studentListHtml = "";
                if (response) 
                    if (response.data && response.data.length > 0) 
                        $.each(response.data , function( index, value ) 
                            studentListHtml += "<tr><td>" + value.id + "</td>" + "<td>" + value.name + "</td></tr>"; 
                        );
                        $("#studentlist table tbody").empty().html(studentListHtml);
                     else 
                        $("#studentlist table tbody").empty().html("<tr><td colspan='2'>No students found</td></tr>");
                    
                
            
        );

    )

</script>

<script type="text/javascript">
    $.ajaxSetup( headers:  'csrftoken' : ' csrf_token() '  );
</script>

【讨论】:

请帮我一个忙...如何显示这些值

以上是关于在 laravel 中使用 ajax 从控制器刀片文件中传递搜索数据时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ajax在刀片中显示验证错误?

如何从刀片模板中的 Javascript 文件重定向 Laravel 路由

Laravel @include 通过 ajax 的刀片视图

laravel 将数据从刀片文件传递到控制器

Laravel - 无法使用刀片从多维数组中获取值

如何从 laravel 刀片加载 vuejs 组件?