Php 如果内容更改,是否自动刷新JS数组?
我有一个javascript函数,它向外部PHP脚本提供AJAX请求,如果新检查与旧检查不同,我希望它自动更新HTMLPhp 如果内容更改,是否自动刷新JS数组?,php,javascript,ajax,Php,Javascript,Ajax,我有一个javascript函数,它向外部PHP脚本提供AJAX请求,如果新检查与旧检查不同,我希望它自动更新HTML <script> window.setInterval(function() { $(function () { $.ajax({ url: 'api.php', data: "", dataType: 'json', success: function(
<script>
window.setInterval(function()
{
$(function ()
{
$.ajax({
url: 'api.php', data: "", dataType: 'json', success: function(rows)
{
for (var i in rows)
{
var row = rows[i];
var id = row[0];
var vname = row[1];
var Password = row[2]
$('#output').append("<hr />").append("<b>id: </b>"+id+"<b> name: </b>"+vname+" <b>Password: </b>"+Password);
}
}
});
});
}, 5000);
</script>
只需在循环之前添加一个对empty的调用
<script>
window.setInterval(function()
{
$(function ()
{
$.ajax({
url: 'api.php', data: "", dataType: 'json', success: function(rows)
{
$('#output').empty();
for (var i in rows)
{
var row = rows[i];
var id = row[0];
var vname = row[1];
var Password = row[2]
$('#output').append("<hr />").append("<b>id: </b>"+id+"<b> name: </b>"+vname+" <b>Password: </b>"+Password);
}
}
});
});
}, 5000);
</script>
当然,如果您的数据量很大,这将不是非常理想的。实际上,我建议让PHP服务器在响应中发送一个时间戳值。然后,您可以在后续的AJAX请求中传回此消息,并让服务器确定自上次时间戳之后是否有要交付的更新。然后,您可以让服务器只发送那些更新后的记录,您可以将这些记录追加/更新,就像您已经执行的那样。为什么要使用追加而不是只写入整个输出?或者,如果您想处理JSON字符串本身,并且假设JSON字符串不是太大,那么您可能只需将最新的字符串存储到一个变量中,将其与传入字符串进行比较,如果它们匹配,则不做任何操作。如果它们不匹配,则使用新数据覆盖整个DOM元素。@MikeBrant您能提供一个示例吗?@MikeBrant此外,在设置时,它已经每5秒发送一次请求并存储响应。为什么不用每个请求替换内容呢?比较返回的内容和当前内容将比简单地更新DOM花费更长的时间,因为浏览器缓存非常高效。如果您的响应非常大,那么您可能希望在服务器端对其进行散列,并且只在浏览器端比较散列以检查更新。ajaxdata是否具有自动递增的id?如果有一个javascript变量存储最后提取的id。然后将其作为POST或GET数据添加到ajax调用中。然后只提取新条目并将其与新的最后一个id一起发送。只有在收到新数据时才附加到html。@是的,ajaxdata为id列设置了一个_I,但答案已被排序。我将+1,但我没有15 re。但我会在计时器启动时接受这个答案。谢谢你的回复,我不是要你举个例子。。但按照我的理解,有没有更简单的方法来解决这个问题?一个简单的“是”或“否”答案就可以了surfice@user2146021与编程世界中的一切一样,最好的方法通常是特定于您的用例的。如果我处理的是大型数据集,我当然不希望每5秒钟传递一次完整的数据集,然后要求客户端浏览器对其进行完整更新。我将研究只在服务器和客户端之间传递增量数据更改的方法。您目前的方法很简单,在可预见的未来可能会满足您的需求。只有您可以决定是否值得您的努力来实现更优化的方法。
<script>
window.setInterval(function()
{
$(function ()
{
$.ajax({
url: 'api.php', data: "", dataType: 'json', success: function(rows)
{
$('#output').empty();
for (var i in rows)
{
var row = rows[i];
var id = row[0];
var vname = row[1];
var Password = row[2]
$('#output').append("<hr />").append("<b>id: </b>"+id+"<b> name: </b>"+vname+" <b>Password: </b>"+Password);
}
}
});
});
}, 5000);
</script>