我在HTML页面上有以下内容:
<script type="text/javascript">
setInterval(function(){refresh()},5000);
function refresh()
{
$.post("test.php",
{
// nothing here
},
function(data, textStatus)
{
$('' + data + '').find('.maindiv').each(function () {
$('.maindiv').replaceWith('.maindiv');
});
});
}
</script>
<div id = "1" class= "maindiv">
<div sid= "1" class= "subdiv">old sub div content</div>
<div cid= "1" class= "childdiv">another old sub div</div>
<img id = "1" src="http://foo.com/bar.png"/>
</div>
<div id = "2" class= "maindiv">
<div sid= "2" class= "subdiv">this content is old</div>
<div cid= "2" class= "childdiv">please update me!</div>
<img id= "2" src="http://foo.com/bar.png"/>
</div>
调用更新元素的PHP页面(test.php):
<?php
echo '<div id = "1" class= "maindiv">
<div sid= "1" class= "subdiv">this is new sub div</div>
<div cid= "1" class= "childdiv">this is also new sub div content</div>
<img id= "1" src="http://foo.com/bar.png"/>
</div>';
echo '<div id = "2" class= "maindiv">
<div sid= "2" class= "subdiv">new content</div>
<div cid= "2" class= "childdiv">new content for this child div</div>
<img id= "2" src="http://foo.com/bar.png"/>
</div>';
?>
这两个元素也出现在HTML页面上。基本上我想要调用PHP页面并从PHP页面获取这些元素并在HTML页面的响应中循环它们,并将每个maindiv(包括其所有子元素)替换为HTML页面上的相应元素。
这只是一个非常基本的例子。我这样做是因为内容在这些元素中发生了变化,并且想要替换像实时更新这样的元素。
我发布的功能似乎没有回应,所以不知道如何实现这一目标。
提前致谢
答案 0 :(得分:1)
您需要索引页面中的maindiv
元素,以便它们与新元素匹配。
还需要修改您要替换的内容
$(data ).filter('.maindiv').each(function (index) {/* filter or find depends on html structure sent*/
/* "this" is the current div in response*/
$('#'+this.id).replaceWith(this);
});
each
将跟踪index
,eq()
用于匹配页面中的相同索引。
编辑:如果只输出是输出根目录中的DIV,还要将find()
更改为filter()
答案 1 :(得分:0)
为什么在收到ajax响应时,你不想有一个包围你要轮询的内容的div,用html()
替换整个块
<?php
//check for ajax and return
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'){
header('Content-Type: text/html');
$response = '
<div id = "a" class= "maindiv">
<div sid= "1" class= "subdiv">'.date("D M j G:i:s T Y").'</div>
<div cid= "1" class= "childdiv">'.md5(time()).'</div>
<img id= "1" src="http://foo.com/bar.png"/>
</div>
<div id = "a" class= "maindiv">
<div sid= "1" class= "subdiv">'.date("D M j G:i:s T Y").'</div>
<div cid= "1" class= "childdiv">'.md5(time()+1).'</div>
<img id= "1" src="http://foo.com/bar.png"/>
</div>';
echo $response;
die;
}
?>
<script type="text/javascript">
function poll(){
setTimeout(function(){
$.ajax({ url: "./test.php", cache: false,
success: function(data){
$("#polling").html( data );
poll();
}});
}, 5000);
}
$(document).ready(function(){
poll();
});
</script>
<div id = "polling" class= "maindiv">
<!--New response will replace the below html-->
<div id = "1" class= "maindiv">
<div sid= "1" class= "subdiv">old sub div content</div>
<div cid= "1" class= "childdiv">another old sub div</div>
<img id = "1" src="http://foo.com/bar.png"/>
</div>
<div id = "2" class= "maindiv">
<div sid= "2" class= "subdiv">this content is old</div>
<div cid= "2" class= "childdiv">please update me!</div>
<img id= "2" src="http://foo.com/bar.png"/>
</div>
</div>
您还可以返回json,然后根据id将响应循环到div中 这是一个例子:
<?php
//check for ajax and return
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'){
header('Content-Type: application/json');
$response = array(
'block_a'=>'content for block a (last_updated:)'.date("D M j G:i:s T Y"),
'block_b'=>'content for block b (last_updated:)'.date("D M j G:i:s T Y"),
'block_c'=>'content for block c (last_updated:)'.date("D M j G:i:s T Y"),
'block_d'=>'content for block d (last_updated:)'.date("D M j G:i:s T Y"),
'block_e'=>'content for block e (last_updated:)'.date("D M j G:i:s T Y"),
);
echo json_encode($response);
die;
}
?>
<script type="text/javascript">
function poll(){
setTimeout(function(){
$.ajax({ url: "./test.php", cache: false,
success: function(data){
$.each(data, function(k, v) {
//key value place html blocks
$("#"+k).html(v);
});
poll();
}, dataType: "json"});
}, 1000);
}
$(document).ready(function(){
poll();
});
</script>
<div id = "block_a" class= "maindiv"></div>
<div id = "block_b" class= "maindiv"></div>
<div id = "block_c" class= "maindiv"></div>
<div id = "block_d" class= "maindiv"></div>
<div id = "block_e" class= "maindiv"></div>
通过这种方式,您可以构建$response
,只包含您希望在每次轮询时替换的内容。