我创建了一个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
答案 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);
},
...
但同样,这只是一个例子。我真的不知道您的数据集是什么样的,或者您希望数据如何传递和使用。这只是一个想法,希望能让你朝着正确的方向前进。