为什么我的php数组只返回最近/最后发布的活动

时间:2015-03-04 17:40:49

标签: javascript php jquery arrays

我创建了一个jquery,它将数据发送到php文件并在查询之后(如果在sql中找到任何数据)php通过json_encode将数据返回到jquery以追加它。

Jquery将两种类型的数据发送到php文件:

第一次页面ID

第二个:帖子ID(jquery数组将它们发送到php文件)

如果我在php文件中使用print_r($_REQUEST['CID']); exit;来测试他从jquery获得的内容,它会返回并显示所有post id。

但是如果我对特定帖子做出任何回复,它只会返回最近的帖子回复。

这意味着,如果我有3个帖子,如: post-1st post-2nd post-3rd ;我的php只返回 post-3rd 活动。

我希望我的脚本在sql提交时更新任何帖子回复。

my wall.php

    // id is dynamic
<div class="case" data-post-id="111"></div> 
<div class="case" data-post-id="222"></div>
<div class="case" data-post-id="333"></div>

//Check for any update after 15 second interval by post id.
<script type="text/javascript" charset="utf-8">

var CID = [];
$('div[data-post-id]').each(function(i){
    CID[i] = $(this).data('post-id');
});

function addrep(type, msg){
CID.forEach(function(id){
    $("#newreply"+id).append("<div class='"+ type +""+ msg.id +"'><ul>"+ msg.detail +"</ul></div>");
});
}
var tutid = '<?php echo $tutid; ?>';
function waitForRep(){
    $.ajax({
        type: "GET",
        url: "/server.php",
        cache: false,
        data: {
        tutid : tutid,
        CID : CID
    },
        timeout:15000, 
        success: function(data){ 
            addrep("postreply", data);
            setTimeout(
                waitForRep, 
                15000 
            );
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            setTimeout(
                waitForRep, 
                15000); 
        }
    });
}

$(document).ready(function(){
    waitForRep();
});
</script>

server.php(我的数组或其他内容可能有问题)

while (true) {
if($_REQUEST['tutid'] && $_REQUEST['CID']){
foreach($_REQUEST['CID'] as $key => $value){

date_default_timezone_set('Asia/Dhaka');
$datetime = date('Y-m-d H:i:s', strtotime('-15 second'));
$res = mysqli_query($dbh,"SELECT * FROM comments_reply WHERE post_id =".$value." AND qazi_id=".$_REQUEST['tutid']."  AND date >= '$datetime' ORDER BY id DESC LIMIT 1") or die(mysqli_error($dbh));

} // array close

$rows =  mysqli_fetch_assoc($res);  

        $row[] = array_map('utf8_encode', $rows);

        $data = array();

$data['id'] = $rows['id']; 
$data['qazi_id'] = $rows['qazi_id'];
//ect all

// do something and echo $data['detail'] = $detail;

    if (!empty($data)) {
        echo json_encode($data);
        flush();
        exit(0);
    }

}  // request close
sleep(5);
}  // while close

2 个答案:

答案 0 :(得分:0)

尝试像这样声明CID数组:

var CID = new Array();

答案 1 :(得分:0)

看起来您正在循环遍历CID并为每个CID运行SQL查询,但您只在循环之外检索一次结果。如果您运行

,您只会获得最后查询的结果
$rows =  mysqli_fetch_assoc($res);

在CIDs foreach循环之外。

@koc: 不幸的是,它不像移动闭合环支架那么简单。如果您尝试在一次AJAX调用中检索多个数据集,那么您需要在AJAX的成功回调或addrep()函数中处理多个数据集。这是实现目标的唯一方法,但您可以采取多种不同的方式,具体取决于您最终要做的事情:

while (true) {
  if($_REQUEST['tutid'] && $_REQUEST['CID']){
    $data = array();
    foreach($_REQUEST['CID'] as $key => $value){

      date_default_timezone_set('Asia/Dhaka');
      $datetime = date('Y-m-d H:i:s', strtotime('-15 second'));
      $res = mysqli_query($dbh,"
        SELECT *
        FROM comments_reply
        WHERE post_id =".$value."
          AND qazi_id=".$_REQUEST['tutid']."
          AND date >= '$datetime'
        ORDER BY id DESC LIMIT 1
      ") or die(mysqli_error($dbh));

      $row = mysqli_fetch_assoc($res)
      $data[] = array_map('utf8_encode', $row);
    } // array close

    //$rows =  mysqli_fetch_assoc($res);  
    //$row[] = array_map('utf8_encode', $rows);
    //$data = array();

    //$data['id'] = $rows['id']; 
    //$data['qazi_id'] = $rows['qazi_id'];
    //ect all

    // do something and echo $data['detail'] = $detail;

    if (!empty($data)) {
      echo json_encode($data);
      flush();
      exit(0);
    }

  }  // request close
  sleep(5);
}  // while close

然后在你的Javascript中:

...
success: function(data){
  for (var i=0, len=data.length; i<len; i++) {
    addrep("postreply", data[i]);
  }
  setTimeout(waitForRep, 15000);
},
...

但同样,这只是一个例子。我真的不知道您的数据集是什么样的,或者您希望数据如何传递和使用。这只是一个想法,希望能让你朝着正确的方向前进。