0

これは必ずしもインターバル障害ではないと思いますが、これが起こっていることです。

基本的に、私はサイトのこのセクションのために独自の「グーグル検索」機能を構築しました。たくさんのチケットタイプのアイテムが一覧表示され、検索機能を使用すると、Googleの場合と同じようにチケットを検索できます。入力すると、実行している検索にデータが入力されます。

したがって、intervalイベントは継続的に実行され、AJAX関数(入力されたテキストに基づいてデータベースを検索するためにコーディングしたメソッドを実行する.jspファイルを呼び出す)を呼び出し、返されたデータを分割してWebページに貼り付けます。あなたが知っている、標準的なAJAXのもの。

しかし、リンクの1つをクリックしようとすると、それを無視しているように見えます。クリックを登録するページを取得するために、特定の時間にクリックする必要があるようです。間隔を遅くすることができ、問題をある程度軽減できますが、検索が遅いようです。そしてそれはまだ時々クリックを無視します。リンクは、テーブル要素内の標準リンクです。

AJAX関数-返送する前にデータをフォーマットしました(JavaScriptよりもJavaコーディングを好むので、XDではなくそこで行いました)

間隔は500MSに設定されています。つまり、行ごとではなく、テキストを一度に置き換えます。だからなぜそれがこれをしているのかidk:/私は連続的な間隔を使用する他のページでこの問題を抱えていません。ただし、そのページにはAJAX呼び出しがありません。

function getResults(supplier, request, cat, type, displayFiles, input)
{

    var output;
    //Ajax variable
    var xmlhttp;
            //Makes the call to the ajax engine based on browser
            if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }  

            var url = "getResults.jsp?supplier=" + encodeURIComponent(supplier) + "&request= " + encodeURIComponent(request) + "&cat= " + encodeURIComponent(cat) + "&type= " + encodeURIComponent(type)
            + "&displayFiles= " + encodeURIComponent(displayFiles) + "&input= " + encodeURIComponent(input);                        



            xmlhttp.open("POST",url,true);


            //Handling of the ajax call
            xmlhttp.onreadystatechange = function(){
                    if(xmlhttp.readyState == 4){             
                        output = xmlhttp.responseText;
                        //alert(output); //Gives the success or failure of the ajax call            
                        document.getElementById("resultsBox").innerHTML = output;

                    }
                }       

          xmlhttp.send(null); 
}
4

2 に答える 2

0

したがって、(少なくとも)500ミリ秒ごとに検索メソッドを起動するsetIntervalによって作成されたタイマーがあります。

検索方法はAsyncであるため、古い検索リクエストが完了する前でも新しい検索リクエストを実行できます。これにより、innerHTMLプロパティ(サーバーの応答時間に応じて)がオーバーフローする一連の更新が作成される可能性があります。リクエストは500ミリ秒ごとに発生しますが、応答がいつ到着するかわからないためです。

提案として、ロジックをやり直して、setIntervalをsetTimeout(またはrequestAnimationFrame)に置き換えて、「オーバーフロー」動作を回避し、結果全体を更新せずに新しいものだけをブロックしてみてください。

于 2012-12-07T18:02:14.570 に答える
0

あなたは私がゲームでするのと同じようにそれをすることができます。

search() {
    do stuff
    setTimeout(search,500);
}

これは私がjavascriptで連続ループを行う方法です。このように、それは単なるループです。setTimeoutは、その関数を1回だけ実行します。setIntervalは間隔ごとに実行し、不注意になるのは非常に簡単です。setTimeoutを使用すると、search()関数が完了したときにそれを再度呼び出すことができます。

于 2016-06-02T12:41:24.013 に答える