我正在學習javascript和json,但我遇到了一些問題:我有一個腳本可以與json一起使用,但是我寫的內容的表現並不好。該代碼僅在我使用螢火蟲或其他工具一步一步地進行調試時才起作用,並且這使我認爲代碼的執行(或其中的一部分......創建表的那一部分,如您所見)需要瀏覽器停止了太多時間。JavaScript代碼的異步執行
的代碼是:
var arrayCarte = [];
var arrayEntita = [];
var arraycardbyuser = [];
function displayArrayCards() {
var richiestaEntity = new XMLHttpRequest();
richiestaEntity.onreadystatechange = function() {
if(richiestaEntity.readyState == 4) {
var objectentityjson = {};
objectentityjson = JSON.parse(richiestaEntity.responseText);
arrayEntita = objectentityjson.cards;
}
}
richiestaEntity.open("GET", "danielericerca.json", true);
richiestaEntity.send(null);
for(i = 0; i < arrayEntita.length; i++) {
var vanityurla = arrayEntita[i].vanity_urls[0] + ".json";
var urlrichiesta = "http://m.airpim.com/public/vurl/";
var richiestaCards = new XMLHttpRequest();
richiestaCards.onreadystatechange = function() {
if(richiestaCards.readyState == 4) {
var objectcardjson = {};
objectcardjson = JSON.parse(richiestaCards.responseText);
for(j = 0; j < objectcardjson.cards.length; j++)
arrayCarte[j] = objectcardjson.cards[j].__guid__; //vettore che contiene i guid delle card
arraycardbyuser[i] = arrayCarte;
arrayCarte = [];
}
}
richiestaCards.open("GET", vanityurla, true);
richiestaCards.send(null);
}
var wrapper = document.getElementById('contenitoro');
wrapper.innerHTML = "";
var userTable = document.createElement('table');
for(u = 0; u < arrayEntita.length; u++) {
var userTr = document.createElement('tr');
var userTdcard = document.createElement('td');
var userTdinfo = document.createElement('td');
var br = document.createElement('br');
for(c = 0; c < arraycardbyuser[u].length; c++) {
var cardImg = document.createElement('img');
cardImg.src = "http://www.airpim.com/png/public/card/" + arraycardbyuser[u][c] + "?width=292";
cardImg.id = "immaginecard";
userTdcard.appendChild(br);
userTdcard.appendChild(cardImg);
}
var userdivNome = document.createElement('div');
userdivNome.id = "diverso";
userTdinfo.appendChild(userdivNome);
var userdivVanity = document.createElement('div');
userdivVanity.id = "diverso";
userTdinfo.appendChild(userdivVanity);
var nome = "Nome: ";
var vanityurl = "Vanity Url: ";
userdivNome.innerHTML = nome + arrayEntita[u].__title__;
userdivVanity.innerHTML = vanityurl + arrayEntita[u].vanity_urls[0];
userTr.appendChild(userTdcard);
userTr.appendChild(userTdinfo);
userTable.appendChild(userTr);
}
wrapper.appendChild(userTable);
}
的問題是,應該讓表中的代碼不等待與JSON文件的工作代碼的完整執行。我該如何解決它?如果可能的話,我寧願用簡單的東西來解決這個問題,而不用jQuery和回調(我是一個初學者)。
我在嘗試,但如果我從displayArrayCards中調用BuildArrayEntita(就像你做的那樣)它不起作用(這就是爲什麼我沒有使用不同的函數,而我把所有的代碼放在一個方法中)。 – user1453638
什麼不工作?你是否試圖檢查你的objectivityjson.cards以確保它包含你期望它包含的內容。嘗試放入console.log(「 - unique text--」);在每個方法的開始(以及onreadystatechange函數中)。然後你可以看到執行的順序。 – Dappergoat
我在這裏和那裏有一些提醒,以瞭解發生了什麼,但我看不到其中之一。 – user1453638