2016-11-05 66 views
1

我正在評論部分(對帖子發表評論),我可以在沒有刷新頁面的情況下存儲用戶點擊的評論,但無法立即在該帖子上顯示這些評論,而無需刷新頁面。erorr:通過ajax顯示評論(來自數據庫)(laravel 5.2)

我的觀點:

<ul id="templates" class="dropdown-menu" role="menu"> 


     <div class="row"> 
     <section class="col-md-offset-1 col-md-3 col-xs-3 "><a class="btn btn-sm" id="Nice" data-postid="{{$post->id}}">Nice!</a> 
     </section></ul> 




@if($storage->comment==0) 
    <div class="row" id="zero"> 
    {{$storage->textcomment}} 
    </div> 
    @endif 

我的腳本:

<script> 
    $(document).ready(function(){ 
    $('.dropdown-menu a').click(function(){ 
    var action=$(this).attr('id'); 
    var id=$(this).attr('data-postid'); 

    $.ajax({ 
    method:'POST', 
    url:{{route('comment123')}}, 
data:{id:id,action:action} 

}) 

    .done(function(msg) { 

    $('#zero').text(msg['new_bod']); 


    }); 
    }); 

    }); 
</script> 

我的控制器:

public function comment123(Request $request){ 

$qw = storage::find($request['id']); 
     $qw->textcomment = $request['action']; 
     $qw->save(); 
     return response()->json(['new_bod' => $qw->textcomment],200); 



    } 

我的路線:

Route::post('/comment123' , [ 

    'uses' => '[email protected]', 
    'as' => 'comment123' 


]); 
+0

如果要顯示最近添加的評論,而不是爲什麼要顯示來自數據庫 – DsRaj

+0

@DsRaj的數據,以便用戶再次登錄時,評論將出現在那裏。 –

回答

1

問題是,當您通過ajax發佈第一條評論時,id爲'zero'的div不會呈現給DOM,因此當您嘗試向該div添加評論時,它會失敗,因爲div不存在,所以基本上你有2種選擇:

  1. 始終呈現在div與「零」的ID在DOM,所以如果有在DB任何意見可以顯示與的第一負載DIV頁面,然後在用戶發佈新評論時添加更多評論,或者在數據庫中沒有評論,因此您使用「display:none;」來呈現它並且當用戶發佈新評論時,您可以將評論添加到div中,然後將其設置爲「display:block」。

  2. 第二種方法 - 更好的方法是,渲染一個div,以便在頁面第一次加載時,只在數據庫上有任何註釋時才加載註釋,然後創建一個間隔函數來檢查新註釋,並添加到評論div或創建這個div,如果它不存在,所以當用戶發佈新評論時,你可以添加到同一個div的評論內容,甚至從DB獲得更多的新評論與來自服務器。

我也建議你使用正確的AJAX功能和實際檢查的評論被保存到數據庫,你可以用「成功」讓&「錯誤」的功能,而不是「完成」功能,這樣你可以告訴用戶保存評論是否有錯誤。

祝你好運!

+0

謝謝Mr.Yohanan爲你提供答案。 ,我明白你想說什麼......但是因爲我對ajax很陌生,所以我不知道如何使用這樣的功能......你會喜歡幫忙,例如。使用追加功能等。 –

+0

嗨,請看看這個答案: http://stackoverflow.com/a/7439692 –

+1

嗨,Tnx ...我一定會嘗試你所說的....如果卡住了會再次與你聯繫。 –