我正在学习JavaScript,而且我在调用函数方面遇到了一些问题......
这是我的两个功能: 第一个:
function geisson() {
var iabile = new XMLHttpRequest();
iabile.onreadystatechange = function () {
if (iabile.readyState == 4) {
var objectjson = {};
var arrayCards = []; //creazione dell'array che conterrà le cards
objectson = JSON.parse(iabile.responseText);
arrayCards = objectson.cards;
var Ettore = []; //Vèttore di cards
//the results
for (i = 0; i < arrayCards.length; i++)
document.getElementById('image').src = "http://www.mysite.com/png/public/card/" + arrayCards[i].__guid__ + "?width=292";
}
}
iabile.open("GET", "gnekcard.json", true);
iabile.send(null);
}
和第二个功能:
function Entity() {
var iabile = new XMLHttpRequest();
iabile.onreadystatechange = function () {
if (iabile.readyState == 4) {
var objectjson = {};
var arrayCards = []; //creazione dell'array che conterrà le cards
objectson = JSON.parse(iabile.responseText);
arrayCards = objectson.cards;
//the results
for (i = 0; i < arrayCards.length; i++)
document.getElementById('informazioni').innerHTML += "\r\n" + "Nome : " + arrayCards[i].__title__ + "\r\n" + "Vanity url: " + arrayCards[i].vanity_urls[0] + "\r\n";
}
}
iabile.open("GET", "gnek.json", true);
iabile.send(null);
}
我想有第三个函数打印其他2个函数的结果。我更喜欢&#34; for&#34;仅在第三个函数中,并回忆其他方法的向量,但它们不是全局的。我不想拥有全局变量(如果可能的话),我该怎么办呢?
答案 0 :(得分:1)
在geisson
功能中,您可以执行此操作:
geisson.arrayCards = arrayCards;
您可以在Entity
函数
Entity.arrayCards = arrayCards;
然后,您可以创建第三个可以访问每个函数的arrayCards
的函数。
function displayArrayCards {
var geissonCards = geisson.arrayCards;
var EntityCards = Entity.arrayCards;
var i;
for(i = 0; i < geissonCards.length; i++) {
document.getElementById('image').src = "http://www.mysite.com/png/public/card/" + geissonCards[i].__guid__ + "?width=292";
}
for(i = 0; i < EntityCards.length; i++) {
document.getElementById('informazioni').innerHTML += "\r\n" + "Nome : " + EntityCards[i].__title__ + "\r\n" + "Vanity url: " + EntityCards [i].vanity_urls[0] + "\r\n";
}
}
答案 1 :(得分:1)
在使用Ajax调用时,应该始终执行以下操作:使用回调。
例如:
function geisson(callback) {
var iabile = new XMLHttpRequest();
iabile.onreadystatechange = function () {
if (iabile.readyState == 4) {
// ...
callback(objectson.cards);
}
}
iabile.open("GET", "gnekcard.json", true);
iabile.send(null);
}
并在你的第三个函数中:
function someName() {
geisson(function(data) {
for (var i = 0; i < data.length; i++) {
//... do something with data ...
}
});
// call Entity the same way here...
}
顺便说一下,在你的第一个函数中,你总是覆盖相同元素(src
)的document.getElementById('image')
属性。在这里迭代整个数组是没有意义的,最终正弦,src
将具有与最后一个元素相关的值。将值分配给多个元素或者只获取数组中的最后一个元素。