2017-03-14 208 views
-1

當用戶使用select字段更改類別時,我只想在視圖上顯示具有該類別的請求 - 並使用AJAX請求執行此操作。我想將從Controller返回的對象傳遞給AJAX的成功處理程序到視圖($ requests變量,如下面的代碼所示),並讓視圖更新顯示的請求。(Laravel)如何使用AJAX將變量返回到.blade.php視圖?

數據正在返回到AJAX的成功處理程序正確,因爲我可以console.log該對象,但它不會更新$ requests變量。

我該如何做到這一點,我在這裏失去了什麼?

表示從DB

@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; 
} 
+0

如果你不是尋找一個代碼編寫服務,請問你會期望你發佈到完成的代碼?你目前在AJAX成功處理函數中會發生什麼? – alaric

+0

沒有ajax,你可以提交'category'的值到當前頁面,並在你的模板中循環'$ posts'變量 –

+0

是的,但是我不想重新加載頁面 - 這就是爲什麼我選擇去使用ajax而不是僅使用重新呈現具有更新變量的視圖的路線。 –

回答

0

可能會這樣嗎?

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

我試過了»返回json_encode($ requests),但是這並沒有做任何事情。那是你在想什麼? –

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); 
} 
+0

我想這是一種不重寫模板代碼的方式,但也許沒有?任何其他方式來實現這一點,你可以想到的? –