(Laravel)如何使用AJAX将变量返回到.blade.php视图?

时间:2017-03-14 02:41:55

标签: php ajax laravel

当用户使用select字段更改类别时,我只想在视图上显示具有该类别的请求 - 并使用AJAX请求执行此操作。我想将从Controller返回的对象传递给AJAX的成功处理程序到视图($ requests变量,如下面的代码所示),以及视图更新显示的请求。

正确地将数据返回到AJAX的成功处理程序,因为我可以控制对象,但它不会更新$ requests变量。

我如何实现这一点,我在这里缺少什么?

显示来自数据库

的请求的视图
@extends('layouts.app')

@section('content')

{{-- Requests --}}
<div class="container">
    <div class="row requests-row">
        <div class="col-md-12">
            <h2>New requests</h2>
            <select name="category" class="form-control category">
                <option value="" disabled selected>Choose a category...</option>
                <option value="Electronics and Computers">Electronics and Computers</option>
                <option value="Hardware">Hardware</option>
            </select>
            <hr>
            <p class="block"></p>
            @foreach ($requests as $request)
                @include('components.requests')
            @endforeach
        </div>
    </div>
</div>

@endsection

AJAX请求

$('.category').change(function() {
    $.ajax({
        method: "GET",
        url: "/category",
        data: $(this).serialize(),
        success: function(data) {
            console.log(data);
            return data;
        },
        error: function(data){
            console.log("Error: " + data);
        },
    });
});

后端处理AJAX请求的控制器

public function changeCategory(Request $request)
{
    $posts = Post::where('category', $request->category)->get();
    return $posts;
}

2 个答案:

答案 0 :(得分:1)

您的template刀片是php,而ajax来自client side javascript。

因此,如果您想要显示某些内容,则需要使用javascript来执行此操作。

也许像

success: function(data) {
    var posts = '';
    $.each(data, function(index, post) {
       posts += '<div class="post">' + post.title + '</div>';
    });
    $('.requests-row .col-md-12').prepend(posts);
}

答案 1 :(得分:0)

可能这样吗?

if($request->ajax()){
    return response()->json(['ajax']);
}