计时器中的Ajax正在影响我的服务器

时间:2015-06-27 18:16:06

标签: javascript php ajax

我正在使用ajax,以便我可以从我的服务器读取文件的内容。我正在调用一个函数,其中ajax是,在一个计时器。这正在影响我的服务器。它正在崩溃。如果这是正确的做到这一点的方法,出了什么问题? 请给几个sugestions,因为我不知道它的问题是什么。

我首先调用函数:“function(ctrl)”。

function get(ctrl){
    var content;
        content=ctrl.id; 

        var getTextUpdate= setInterval(function () {
                    readdocument();
        }, 1200);

}

function readdocument() {
        var xmlhttp;
        if (window.XMLHttpRequest){
                xmlhttp=new XMLHttpRequest();
        }else{
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        } 
                xmlhttp.onreadystatechange=function(){
                    if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                            document.getElementById("area").value=xmlhttp.responseText;
                    }
                } 
        xmlhttp.open("GET","../user/test/read-text.php?user="+content,true);
        xmlhttp.send();

} 

这是read-text.php文件:

<?php
    $rec_user=$_GET['user'];
    echo($rec_user);
    $chat = fopen($rec_user.".txt", "r") or die("Unable to open file!");
    echo fread($chat,filesize($rec_user.".txt"));
    fclose($chat);
?>

1 个答案:

答案 0 :(得分:4)

您的代码存在的问题是,您不是在等待响应才能结束。所以,随着时间的推移,您将在请求后发送请求。这将在适当的时候耗尽所有内存。所以在发送下一个请求之前先等待响应。

这个怎么样?

function loadXMLDoc(ctrl) {
    var content=ctrl.id; 
    var xmlhttp = new XMLHttpRequest();
    var url = "../user/test/read-text.php?user="+content;

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == XMLHttpRequest.DONE) {
            if (xmlhttp.status == 200) {
                document.getElementById("area").value=xmlhttp.responseText;
                setTimeout(loadXMLDoc(), 1200); //call the function again
            } else if (xmlhttp.status == 400) {
                console.log('There was an error 400');
            } else {
                console.log('something else other than 200 was returned');
            }
        }
    };

    xmlhttp.open("GET", url, true);
    xmlhttp.send();
};

loadXMLDoc(ctrl);