使用Laravel Blade和Ajax即时搜索,

时间:2016-09-01 10:17:14

标签: javascript jquery ajax laravel blade

这是我的jquery代码

我正在尝试运行代码,Laravel刀片无法识别foreach语句中的$ results变量。 我没有添加表单的代码既不是路由。他们工作得很好。

主要问题是在我的刀片文件(视图)中显示ajax的结果

// My Controller where i'm executing the search

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;
use App\Tag;
use App\Lymstyle;
use App\Legende;
use App\Http\Requests;
use DB;
use Illuminate\Support\Facades\Input;

class SearchController extends Controller
{
    public function getResults()
    {
        $query = Input::get('search');

        $results = Post::where('title', 'LIKE', '%'.$query.'%')->get();

       ' return $results;'
    }
}

&GT;

// The Ajax Call, where i'm handling the post request and its reponse

var timer;

function keyUp()
{
    timer = setTimeout(function()
    {
        var keywords = $('#search').val();

        if(keywords.length > 0)
        {   
            var searchform  = $('.search').serializeArray();
            var url         = $('.search').attr('action');

            $.post(url, searchform, function(data){
                console.log(data);
                $('#search-results').html(data);
            });

        }

    }, 500);
}

function keyDown()
{   
    clearTimeout(timer);
}

<div id="search-results">
@foreach($results as $post)
     <h2>We found some...</h2>
@endforeach
</div>

我收到错误,说视图中的$ results变量不存在

2 个答案:

答案 0 :(得分:0)

您可以json_encode变量。

public function getResults()
  {
    $query = Input::get('search');
    $results = Post::where('title', 'LIKE', '%'.$query.'%')->get();
    echo json_encode(array('status'=>TRUE,'results'=>$results)); die;
  }

Jquery和Ajax:

$(document).on('submit', '#formid', function (e) 
{         
    e.preventDefault();
    var frm = $(this);
    $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: frm.serialize(),
        success: function (data)
            {
                var res = $.parseJSON(data);
                var result = res.results;
                 $('#search-results').html(result);
            }
});

答案 1 :(得分:0)

我认为在您的控制器中,您需要返回视图而不是结果。

首先将以下功能放在单独的刀片文件中,让我们说search.blade.php

@foreach($results as $post)
     <h2>We found some...</h2>
@endforeach

现在,在您的控制器中,返回渲染的视图而不是结果。

public function getResults()
{

$query = Input::get('search');

$results = Post::where('title', 'LIKE', '%'.$query.'%')->get();

return view('search')->with('results',$results)->render();

}

保持其他一切......