2017-10-20 22 views
0

私はupvote投稿のスタイルレイアウトを私のウェブサイトに持っている、私は、コードがうまく動作する、より多くの投稿を読み込むajax要求があるが、私はそれらをupvoteしようとするときです。 ajaxリクエストから動的に表示されないものはupvotedできますが、それ以上ロードするとupvotedできません。動的要素のクリック時のJquery

私はid like_postIDを持っているので、コードはupvotedされていることを確認することができます。

私は$(document).on(eventName, selector, function(){});を見つけました。試してみましたが、それでも動作しますが、ajax呼び出しで要求されていないものだけが動作します。

HERESに私のHTMLコード:

<div class="contain"> 
    <div class="upvote-vetor"> 
    <a href="javascript:void(0)"><img alt="" src="images/upvotes.png" id="like_'.$post['id_post'].'" class="like"></a> 
    <p id="likes_'.$post['id_post'].'">'.$upvote['upvotes'].' Up Votes</p> 
</div> 

HERESに私は私のjQuery:

$(document).ready(function(){ 

    // like and unlike click 
    $(".upvote-vetor").on("click",".like", function(){ 
     var id = this.id; // Getting Button id 
     var split_id = id.split("_"); 

     var text = split_id[0]; 
     var postid = split_id[1]; // postid 
     // Finding click type 
     var type = 1; 
     // AJAX Request 
     $.ajax({ 
      url: 'php/upvote.php', 
      type: 'post', 
      data: {postid:postid,type:type}, 
      dataType: 'json', 
      success: function(data){ 
       var likes = data['likes']; 

       $("#likes_"+postid).text(likes);  // setting likes 

      }, 
      error: function(data){ 
       alert("error : " + JSON.stringify(data)); 
      } 
     }); 
    }); 
}); 

PHPのupvoteコード:事前に

$userid = $id_user; 
$postid = $_POST['postid']; 


// Check entry within table 
$query = "SELECT COUNT(*) AS upvotes FROM upvotes WHERE id_post='$postid' and id_user= '$userid'"; 

$result = $conn->prepare($query); 
$result->execute(); 
$fetchdata = $result->fetch(PDO::FETCH_ASSOC); 
$count = $fetchdata['upvotes']; 


if($count == 0){ 
    $insertquery = $conn->prepare("INSERT INTO `upvotes` (`id_upvote`, `id_user`, `id_post`) VALUES (NULL, '$id_user', '$postid');"); 
    $insertquery ->execute(); 
}else { 

    $updatequery = $conn->prepare("DELETE FROM `upvotes` WHERE id_user= '$userid' and id_post='$postid'"); 
    $updatequery->execute(); 
} 


// count numbers of like and unlike in post 
$query2 = "SELECT COUNT(*) AS upvotes FROM upvotes WHERE id_post='$postid'"; 
$result2 = $conn->prepare($query2); 
$result2->execute(); 
$fetchlikes = $result2->fetch(PDO::FETCH_ASSOC); 
$totalLikes = $fetchlikes['upvotes']. " Up Votes"; 


$return_arr = array("likes"=>$totalLikes); 

echo json_encode($return_arr); 

感謝。 :)

+0

成功イベントでは、「var likes = data.likes」にする必要があります。これはJSONオブジェクトではない配列です。 – SaidbakR

+1

@SaidbakR 'data ['likes']'は 'data.likes'と同義です –

+0

upvote.phpコードを共有できますか?私はちょうど興味があります - IDの不一致に関連しているか、適切に生成されていないように思えるからです。あなたがクリックリスナーを添付したオブジェクトを置き換えていないので(親のwouldnにリスナーを付ける本当にそれには影響しません)。私が見たいのは、あなたのAJAXの変数名として 'postid'を使うことですが、あなたの他のPHPは代わりに' id_post'を表示しています。あなたの引用が適切に設定されているかどうかは、PHPがプリントアウトするHTMLを表示するだけでなく、そこにいくつかのPHPを残しているかどうかを知ることも難しいです... –

答えて

1

関連要素のクリックをリッスンするには、すでに存在する親要素にリスナーをアタッチする必要があります。例:

$('body').on('click','.upvote-vetor .like', my_function) 
関連する問題