2017-09-29 88 views
0

救我嘗試後等級的數據與阿賈克斯保存laravel 5.5Laravel評級數據與阿賈克斯

這裏是我的形式:

<form class="foodstars" action="{{route('foodStar')}}" id="addStar" method="POST"> 
     {{ csrf_field() }} 
     <input class="star star-5" value="5" id="star-5" type="radio" name="star"/> 
     <label class="star star-5" for="star-5"></label> 
     <input class="star star-4" value="4" id="star-4" type="radio" name="star"/> 
     <label class="star star-4" for="star-4"></label> 
     <input class="star star-3" value="3" id="star-3" type="radio" name="star"/> 
     <label class="star star-3" for="star-3"></label> 
     <input class="star star-2" value="2" id="star-2" type="radio" name="star"/> 
     <label class="star star-2" for="star-2"></label> 
     <input class="star star-1" value="1" id="star-1" type="radio" name="star"/> 
     <label class="star star-1" for="star-1"></label> 
    </form> 

這裏是我的Ajax:

<script> 
$('#addStar').onclick('.foodstars',function(e) { 
    $.ajaxSetup({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'), 
      } 
     }); 
    e.preventDefault(); 
    $.ajax({ 
     type: 'POST', 
     cache: false, 
     dataType: 'JSON', 
     url: '/', 
     data: $('#addStar').serialize(), 
     success: function(data) { 
      console.log(data); 
     }, 

    }); 
    return false; 
}); 
</script> 

這是我的控制器:

public function foodStar(){ 
     // $rating = new Rating; 
     // $rating->rating = 4; 
     // $rating->user_id = \Auth::id(); 
     // $food->ratings()->save($rating); 
     $rating = new Rating; 
     $rating->user_id = \Auth::id(); 
     $rating->rating = //get new star count; 
     $food->ratings()->save($rating); 
     return response()->json(['rating' => $rating->rating]); 
    } 

這裏是我的路線:

Route::post('/rating', '[email protected]')->name('foodStar'); 

我的包的默認代碼提供的靜態方法來保存率,但我需要得到將選擇什麼樣的用戶,包的示例代碼在我的控制器代碼註釋。

謝謝。

回答

1

HTML:

<input type="hidden" name="id" value="{{ $foodId }}"> 

的Javascript:

$('#addStar').change('.star', function(e) { 
    $.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'), 
    } 
    }); 
    $.ajax({ 
    type: 'POST', 
    cache: false, 
    dataType: 'JSON', 
    url: $(this).attr('action'), 
    data: $(this).serialize(), 
    success: function(data) { 
     console.log(data); 
    } 
    }); 
}); 

控制器:

namespace ... 
... 
use Illuminate\Http\Request; 
... 

public function foodStar (Request $request) { 
    // $rating = new Rating; 
    // $rating->rating = 4; 
    // $rating->user_id = \Auth::id(); 
    // $food->ratings()->save($rating); 
    $rating = new Rating; 
    $rating->user_id = \Auth::id(); 
    $rating->rating = $request->input('star'); 
    $food = Food::find($request->input('id')); 
    $food->ratings()->save($rating); 
    return response()->json(['rating' => $rating->rating]); 
} 
+0

不保存數據。 – mafortis

+0

@mafortis如果你做了一個'dd($ request-> input('star'))'它是否顯示評分值?在分配請求值後,「dd($ rating)」的輸出是什麼? –

+0

如果我使用'dd($ request-> input('star'))'獲取加載頁面的錯誤,如果我使用'dd($ rating)'或'dd($ rating-> rating);'什麼都不會發生。 – mafortis

0

解決方案非常簡單。

變化data: $('#addStar').serialize(),data: {rating: $('input:checked').val()},

和服務器端

public function foodStar(Request $request){ 
     // $rating = new Rating; 
     // $rating->rating = 4; 
     // $rating->user_id = \Auth::id(); 
     // $food->ratings()->save($rating); 
     $rating = new Rating; 
     $rating->user_id = \Auth::id(); 
     $rating->rating = $request->rating; //get new star count; 
     $food->ratings()->save($rating); 
     return response()->json(['rating' => $rating->rating]); 
    } 

你也應該更改URL在你的Ajax

+0

仍然一無所獲happeed。 – mafortis

+0

更改網址爲了什麼?評級在帖子中,每個帖子都有不同的網址。 – mafortis

+0

@mafortis我編輯答案。你需要將URL改爲'/ rating'而不是'/' –