1

私が自分のページを実行すると、1つのajaxだけが機能します... setIntervalの「プロパティ」と関係があると確信しています...

<script>
function encontrarnumero() {
    src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
    var divid = 'u219-4';


    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
            document.getElementById(divid).innerHTML = xmlhttp.responseText;
            setInterval(encontrarnumero, 1000);


        }
    };
    xmlhttp.open("GET", "numero.php?q=" + q + "&p=" + p + "&w=" + w, true);
    xmlhttp.send();
}

window.onload = function () {
    encontrarnumero();
};
</script>
<script>
function encontrartiempo() {
    src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
    var divid = 'tiempo';


    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
            document.getElementById(divid).innerHTML = xmlhttp.responseText;
            setInterval(encontrartiempo, 2000);


        }
    };
    xmlhttp.open("GET", "tiempo.php?q=" + q + "&p=" + p + "&w=" + w, true);
    xmlhttp.send();
}

window.onload = function () {
    encontrartiempo();
};
</script>

何か案は??ありがとう!!ps。問題はphpファイルではないと確信しています。各ajaxを単独で実行すると、正常に動作します。

4

2 に答える 2

1

コードの繰り返しが多すぎます。コードを 1 つの関数にリファクタリングすると、作業ははるかに簡単になります。

<script>
// Move repeating code to a function
function doAJAX(divid, page) {
    if (window.XMLHttpRequest) {
        // Use `var` when declaring variables
        var xmlhttp = new XMLHttpRequest();
    } else {
        var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
            document.getElementById(divid).innerHTML = xmlhttp.responseText;

            // Use `setTimeout` if you're going to make recursive calls!
            setTimeout(function() {
                doAJAX(divid, page)
            }, 1000);
        }
    };
    xmlhttp.open("GET", page + "?q=" + q + "&p=" + p + "&w=" + w, true);
    xmlhttp.send();
}

// Just one onload handler that calls the function twice,
//    passing the different info for each call
window.onload = function () {
    doAJAX('u219-4', "numero.php");
    doAJAX('tiempo', "tiempo.php");
};
</script>
于 2013-06-04T23:01:48.087 に答える
0

元のコードの問題はwindow.onload、2 回割り当てていて、2 番目の割り当てが最初の割り当てを上書きしたことでした。encontrarnumero()それが、呼ばれなかった理由です。

Crazy Train の答えは、 への単一の割り当てのみを行うことに注意してくださいwindow.onload

最後に、このように割り当てることwindow.onloadは、実際には最善の方法ではありません。ウィンドウがロードされたときに何かをしたい場合は、JQuery の使用を検討するか、純粋な JavaScript が必要な場合はネイティブ ブラウザ イベントの使用を検討してください。この回答でJQueryが実際にこれをどのように行うかを見ることができます

于 2013-06-04T23:10:32.050 に答える