在 laravel 或 Php 的搜索字段中显示 Json

Posted

技术标签:

【中文标题】在 laravel 或 Php 的搜索字段中显示 Json【英文标题】:Display Json in search field in laravel or Php 【发布时间】:2018-06-01 20:52:59 【问题描述】:

我需要在搜索栏上显示搜索到的值。

我的控制器代码:

$q = Input::get('q');
  $query = Jobs::select('job_title')->Where('job_title', 'LIKE', '%'.$q.'%')->get();
  return response()->json($query);

我的 jquery axios 代码:

 $(document).ready(function()
  $("#jobsearch").keyup(function()
     url = "route('searchexistingjob')";
     var word = $("#jobsearch").val();
     const data = 
       'q' : word
     
     axios.post(url,data).then(response =>
        for(i=0; i<response.data.length; i++)
            // $('#jobsearch').val(response.data[i].value);           
     );
  );
);

HTML 代码

<input type="text" id="txtjobsearch" name="txtjobsearch" class="form-control" placeholder="Job title, designation, description..." autocomplete="off" data-id="1">

所有的东西都是正确的,但我需要如何在搜索框中显示该值有什么想法吗?

【问题讨论】:

expertphp.in/article/… 试试这个链接 但我需要通过 axios 进行操作 你在使用 Vue.js? 在您的视图中尝试 request()-&gt;input('q') 查询变量q 我不认为在问题后面加上 12 个问号会达到预期的效果。 【参考方案1】:

如果可以的话,你可以改变响应格式

$q = Input::get('q');
$query = Jobs::select('job_title')->Where('job_title', 'LIKE', '%'.$q.'%')->get();
return response()->json([
    search_terms => $q,
    results => $query,
]);

或者当您使用 ajax 时,您已经有了搜索词:

所以而不是:

$('#jobsearch').val(response.data[i].value);  

您将使用:

$('#jobsearch').val(word);  

或者只是删除该行并留下已经输入的内容。

【讨论】:

【参考方案2】:

您只需几个简单的步骤即可完成。

创建一个具有相同链接、控制器和功能的路由,只需使用 POST 方法。 将输入字段包裹在表单中,并在提交时将其转到同一页面。 在该控制器@函数中创建变量,假设:

$result = "";

然后将该变量传递给视图。 并在视图中,将该输入的值设置为 $result;

如果它还没有被查询到,那么那个输入将被清除($result = '';),否则,它会显示那个查询的结果。

// routes/web.php 
Route::get('/home', 'SearchBarController@index');
Route::post('/home', 'SearchBarController@index');

// app/Http/Controllers/SearchBarController.php
public function index()

    $result = '';
    if(request()->isMethod('post'))
    
        $q = Input::get('textjobsearch');
        $query = Jobs::select('job_title')->where('job_title', 'LIKE', '%'.$q.'%')->get();
        $result = json_encode($query);
    

    return view('searchbar.index', compact('result'));


// resources/views/searchbar/index.blade.php

<form method='post'>
    <input type="text" id="txtjobsearch" name="txtjobsearch" value=" $result " class="form-control" placeholder="Job title, designation, description..." autocomplete="off" data-id="1">
<input type='submit' />
</form>

就是这样。

就这么简单。

【讨论】:

以上是关于在 laravel 或 Php 的搜索字段中显示 Json的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 搜索查询优化

Laravel 规范搜索

Laravel Eloquent:如果搜索文本字段为空,如何显示所有行

Laravel如何通过ajax按名称或ID搜索在前端仅显示用户帐户的附加患者

Laravel中带有2个外键的搜索栏

Laravel:高级搜索表单查询