使用Javascript/JQuery访问从外部XML文件构建的数组
我希望这不是一个太多的新问题,但我已经有一段时间了,所以我想我会让步,在这里征求我的第一条建议 我试图使用javascript/jQuery/ajax读取一个外部xml文件,并将检索到的数据放入一个数组中,以便以后可以引用它 到目前为止,我似乎在做所有事情,直到我将数据放入数组为止,但是我很难在创建数据的函数内部以外的任何地方读取数据。为什么我不能从该函数以外的任何位置访问阵列 这是我的密码。。。 请帮忙使用Javascript/JQuery访问从外部XML文件构建的数组,javascript,jquery,xml,ajax,arrays,Javascript,Jquery,Xml,Ajax,Arrays,我希望这不是一个太多的新问题,但我已经有一段时间了,所以我想我会让步,在这里征求我的第一条建议 我试图使用javascript/jQuery/ajax读取一个外部xml文件,并将检索到的数据放入一个数组中,以便以后可以引用它 到目前为止,我似乎在做所有事情,直到我将数据放入数组为止,但是我很难在创建数据的函数内部以外的任何地方读取数据。为什么我不能从该函数以外的任何位置访问阵列 这是我的密码。。。 请帮忙 $.ajax({ type: "GET", url: "data.xml"
$.ajax({
type: "GET",
url: "data.xml",
dataType: "xml",
success: do_xmlParser
});
function do_xmlParser(xml)
{
var myArray = new Array();
$(xml).find("tag").each(function ()
{
myArray.push($(this).find("innerTag").text());
});
console.log("inside "+myArray); // This outputs the array I am expecting
return myArray; // is this right???
}
console.log("outside: "+myArray); // This does NOT output the array but instead I get "myArray is not defined"
仔细看,你会发现。实际上,您正在发射一个不存在的阵列。您已经在函数中声明了myArray。试试这样做
console.lod("outside :"+do_xmlParser(xml)); // I think that when you merge a string and an array it will output only string, but I can be wrong.
您将
doxmlparser
定义为对异步函数的回调(jqueryajax调用的success
)。在ajax调用成功后,您希望发生的任何事情都必须发生在该回调函数中,或者您必须从成功回调中链接函数
按照现在的方式,代码的实际执行将是:
ajax -> file being requested -> console.log ->
file transfer done -> success handler
如果您正在做一些关键的事情,并且希望调用是同步的,那么您可以提供async:false
设置为ajax调用。然后,您应该能够执行以下操作:
var myArray = [],
do_xmlParser = function (xml)
{
$(xml).find("tag").each(function ()
{
myArray.push($(this).find("innerTag").text());
});
};
$.ajax({
type: "GET",
url: "data.xml",
dataType: "xml",
success: do_xmlParser,
async: false
});
console.log("outside: " + myArray);
但是,async
选项不适用于跨域请求
注我不建议这样做。AJAX调用应该是异步的,我总是使用
success
回调对返回的数据执行所有处理
编辑:
还有,如果你喜欢阅读。。。我建议使用and(由David Flanagan编写)。那么我应该在哪里声明数组,以便能够在函数中添加到数组中,然后稍后从中读取?实际上。这不可能是正确的,因为在函数中,我得到了后跟数组内容的字符串。像这样:“里面:4,5,4,3,4,5,4,4,3”等等…太棒了!!真不敢相信这么小的变化就治好了这个头痛!顺便说一句,(很抱歉偏离了一个稍微不同的观点,但是)这样做有什么风险,或者只是出于个人喜好,而您不这么做?AJAX应该使所有内容都异步或无阻塞。通过强制同步请求,页面上的所有其他脚本都将被阻止,即在完成之前不会运行。如果在DOM准备就绪时运行此命令,甚至可能会导致图像在完成加载之前等待此代码完成。如果xml文件很大,或者需要很长时间才能完成传输,则可能会看到关于无响应脚本的错误(取决于浏览器)。至少,我会把这段代码放在dom就绪回调的末尾。谢谢。我现在累了,要睡觉了,但我会看看明天是否能在考虑到这一点的情况下重写代码。你有什么建议可以让我写得更好吗?或者我应该一起远离“xml到数组”的想法吗?(这也许可以解释为什么在搜索谷歌时,似乎完全没有关于该方法的教程!)例如,请查看我编写的地震跟踪器的源代码:您将看到所有需要从xml加载数据的操作都是通过成功回调来执行的(例如,在该处理程序中,我调用
addMarker
)。