0

我正在使用一个简单的 AJAX 脚本设置为每 5 秒执行一次,以显示来自 sql 表的所有新闻提要。一切正常,但是当我想将 youtube 视频嵌入到文章中时,它每 5 秒重新加载一次。

有没有办法解决这个问题?

这是我的脚本...“updatedStories.php”基本上从我的提要表中提取所有数据并回显它。

<script>
//get AJAX xmlhttp
function getAJAX(){
    var xmlhttp;
    if(window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else { // IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xmlhttp;
}
//ajax example
function updateStories(){
    var xmlhttp = getAJAX();

    xmlhttp.onreadystatechange=function() {
        if(xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("stories").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("POST","updatedStories.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send();
}
updateStories();
setInterval("updateStories()",5000);
</script>   
4

2 回答 2

1

您正在用数据库中的新内容完全替换故事。这意味着您每次都在创建新的 YouTube 嵌入 - 因此会出现重新加载问题。您需要更改页面的工作方式。与其每五秒获取所有当前商店,不如考虑仅获取自上次更新以来新/更改的故事。不幸的是,它比您当前的代码涉及更多的解决方案。

于 2012-05-08T01:12:41.653 回答
0

我设法让它工作!我正在使用 jQuery 来添加新帖子,所以现在它们按顺序排列。

这是我的代码:javaScript

//get AJAX xmlhttp
function getAJAX(){
    var xmlhttp;
    if(window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else { // IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xmlhttp;
}

setInterval(function (){
    var xmlhttp = getAJAX();

    xmlhttp.onreadystatechange=function() {
        if(xmlhttp.readyState==4 && xmlhttp.status==200) {
            //document.getElementById("stories").innerHTML=xmlhttp.responseText + document.getElementById("stories").innerHTML;
            jQuery("#main_section div#stories").prepend(xmlhttp.responseText);
        }
    }
    xmlhttp.open("POST","updatedStories.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send();
},5000);

比添加新帖子的脚本:

        function update(){
            $query = 'SELECT * FROM stories WHERE time > \''.$_SESSION['last_time'].'\' ORDER BY time DESC ';
            $result = mysql_query($query);
            $num = mysql_num_rows($result);
            $first = true;
            while($rows = mysql_fetch_array($result)){

            $time = $rows['time'];
                if ($first) {
                    $_SESSION['last_time']=$time;
                        $first = false;     
                }
                $title = $rows['title'];
                $user_id =$rows['user_id'];
                $content = $rows['content'];
                display($title,$time,$user_id,$content);
                $_SESSION['last_time']=$time;
            }

        }
于 2012-05-08T09:20:07.230 回答