2016-10-08 11 views
1

仮想通貨を別のユーザーに送信するボットを作ろうとしています。私はユーザーのためのデータベースを介してボットの検索を持っています。検索する前に、部門の内部htmlには要素が全くありません。検索後、それはいくつかのユーザーリンクで満たされます。JavascriptがHTML要素が存在するのを待ちます

結果が表示されるまでに時間がかかるので、少なくとも1つのアンカータグが存在するのを待つためにJavaScriptが必要です。これどうやってするの?

+0

あなたは、あなたのJavaスクリプト機能を使用して、非同期のXMLHttpRequestを使用してい –

+0

が実行されます、最初のコントロールがロードされたHTMLコントロールの下に、あなたのJavaスクリプト機能を置くことができます(あなたはそれがほとんどのブラウザで動作することを確認するつもり必要polyfillある)を使用します? – alfadog67

+0

あなたの質問を編集して、構造の例とその構造に移入するスクリプトを含めてください。 –

答えて

-1

ありAJAXデータは、要素自体を移入するときに実際にチェック由来すべてがこれを行うには多くの、多くのより良い方法は、ありますが、次のように動作します:

var t = setInterval(function() { 
    if ($("element").children().length > 0) { 
    clearInterval(t); 
    // do stuff 
    } 
}, 50); 
+0

新しいjQueryオブジェクトを作成し、DOMを照会し、子の配列を返す関数を呼び出して、配列の長さを50ミリ秒ごとにチェックし、スクリプトが見つかるまで長さが0の場合はすべて削除します。それはかなり過剰なようです。 –

+1

また、この質問にはjQueryタグはありません。「フレームワークやライブラリ用のタグも含まれていなければ、javascriptタグを使った質問に対して純粋なJavaScript応答が期待されます。」](http://stackoverflow.com/タグ/ javascript/info) –

-1

遅らせるためのsetTimeout()を使用古いブラウザ/マシンでは予想よりも時間がかかることがあるため、コードは数秒で危険です。

代わりにpromise()を使用してください。ドキュメントhttps://api.jquery.com/promise/を見つけることができます。

+1

この質問にはjQueryタグはありません。['フレームワークやライブラリ用のタグも含まれていなければ、javascriptタグを使った質問に対して純粋なJavaScript応答が期待されます。]] –

+0

さて、javascriptの約束を使用してください。 –

0

私はこれがAJAX呼び出しであると推測しています。

AJAX callbackを使用して、サーバーから結果が得られたかどうかを確認できます。

このような何か:

var tags_available = false; 
$.ajax({ 
    ... the ajax stuff; 
}).done(function(data){ // The callback 
    if(data || $('#tags_element').lenght != 0){ 
    tags_available = true; 
    }else{ 
    tags_available = false; 
    } 
}) 

その後:

if(tags_available){ 
    console.log("Tags available") 
} 
0

私はあなたがDOM要素は、新しい要素が取り込ま/更新されているかどうかを確認する必要が正しくあなたを理解している場合。あなたはそれを達成することができますいくつかの方法があります。window.setTimeoutは機能を使用して

1)

2)MutationObserverクラス

これは現代的なアプローチ(I

function checkForChanges() { 
 
    var observeThis = document.getElementById('observethis'); 
 
    if (observeThis.hasChildNodes()) { 
 
    alert('yes'); 
 
    return; 
 
    /*this is gonna execute only once */ 
 
    } 
 
    window.setTimeout(function() { 
 
    checkForChanges(); 
 
    }, 25); 
 
} 
 

 
checkForChanges(); 
 

 
/* this part is only relevant for demonstration. 
 
It shows what happens when dom element gets new child */ 
 
(function() { 
 
    var observeThis = document.getElementById('observethis'); 
 
    var button = document.getElementById('button-append'); 
 
    button.addEventListener('click', function() { 
 
    var anchorElement = document.createElement('a'); 
 
    anchorElement.href = "http://example.com"; 
 
    anchorElement.target = "_blank"; 
 
    anchorElement.innerHTML = "Link"; 
 
    observeThis.appendChild(anchorElement); 
 
    }, false); 
 
})();
<div id="observethis"></div> 
 
<button id="button-append">append anchor</button>
推奨されるものとも言えるでしょう)。

function checkForChanges() { 
 
    var observeThis = document.getElementById('observethis'); 
 
    // create an observer instance 
 
    var observer = new MutationObserver(function(mutations) { 
 
    mutations.forEach(function(mutation) { 
 
     if (mutation.type === 'childList') { 
 
     alert("insert your own code"); 
 
     } 
 
    }); 
 
    }); 
 
    var config = { 
 
    attributes: true, 
 
    childList: true, 
 
    characterData: true 
 
    }; 
 
    observer.observe(observeThis, config); 
 
    //observer.disconnect(); 
 
    //use observer.disconnect to end observations 
 
} 
 

 
checkForChanges(); 
 

 
/* this part is only relevant for demonstration. 
 
It shows what happens when dom element gets new child */ 
 
(function() { 
 
    var observeThis = document.getElementById('observethis'); 
 
    var button = document.getElementById('button-append'); 
 
    button.addEventListener('click', function() { 
 
    var anchorElement = document.createElement('a'); 
 
    anchorElement.href = "http://example.com"; 
 
    anchorElement.target = "_blank"; 
 
    anchorElement.innerHTML = "Link"; 
 
    observeThis.appendChild(anchorElement); 
 
    }, false); 
 
})();
<div id="observethis"></div> 
 
<button id="button-append">Append Child</button>
あなただけのAJAXコールバックからの応答を取得するために待っている場合MutationObserver here

3)についての詳細を読み、実際にちょうどのXMLHttpRequestを使用し、その後、DOMの変化を観察する必要はありません。またはさらに良い。新しいJavaScriptのfetch APIを

関連する問題