DOM elemsが存在するのを待つことに問題があります。非同期xhrとコールバック
$(document).ready(function() {
var searchParam, searchStr;
// some values to vars
loadTags(15,highlightAndSearchTags(searchParam,searchStr));
});
機能はここにある:すべての
まず、私は私のバックエンドにXHRを作成し、そこからいくつかの情報を取得するあなたが見ることができるように
function highlightAndSearchTags(searchParam, searchStr) {
if (searchParam == 'tags') {
var selectedTags = searchStr.split(',');
console.log($("#my_favorite_latin_words").children().length); // sometimes returns 0, sometimes returns number of <span> in the div (see loadTags())
for (var i = 0; i < selectedTags.length; i++) {
$("#" + selectedTags[i]).toggleClass("tag-selected");
}
}
}
function loadTags(showedTagsLength, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', apiUrl + "tags/", true);
xhr.withCredentials = true;
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status != 200) {
console.log(xhr.responseText);
}
else {
tagList = JSON.parse(xhr.responseText);
tagList = tagList.results;
for (var i = 0; i < showedTagsLength; i++) {
$("#my_favorite_latin_words").append("<span id=\'" + tagList[i].tag_pk + "\'>" + tagList[i].name + "</span>");
}
}
setTimeout(callback, 1); //found this trick somewhere on stackoverflow
}
};
xhr.send();
}
がコールバックが存在します1msのタイムアウト後に実行されます(私はこのトリックを少し前にスタックのどこかに見つけました)が、別の関数は時折追加された要素を見ません。 私はまた、これまで運と
callback.call()
を試してみました。
この場合、要素を正しく待機する方法は誰にでも分かりますか?
'loadTags(15、highlightAndSearchTags(searchParam、searchStr))として作成し、渡すことができ、' - >これは '直ちに' highlightAndSearchTags(searchParam、searchStr)を呼び出しと戻りを通過'callback'として' loadTags'に値( 'undefined')を設定します。 – Andreas
setTimeout" trick "は不要です - あなたの問題は@Andreasが指摘しているように...' loadTags(15、function(){highlightAndSearchTags(searchParam 、searchStr);}); '代わりに –