希望我只是做了一个愚蠢的疏忽,但我无法弄清楚为什么以下不起作用:
$(function() {
var xml;
$.get(
"somexml.xml",
function(data){
xml = data;
},
"xml");
alert(xml);
});
如果我把警报放在回调函数中,我会回来object XMLdocument
但如果我将它放在ajax调用之外,我会得到undefined
。
由于我的目标是要解析一个新的DOM,所以我不希望XMLdocument的整个处理都在回调函数中。
我已经尝试在整个onready函数之外定义变量,在顶部(如上所述)和回调函数内部,都没有运气。
根据jquery文档中的Specifying the Data Type for Ajax Requests,这应该是可能的。
答案 0 :(得分:2)
AJAX被定义为异步 JavaScript和XML - 尽管人们也将这个术语用于同步和非XML请求。然而,异步意味着请求将在单独的线程上执行。 xml
未定义,因为发生了以下情况:
发送请求 - >访问
xml
var - >收到回复 - >data
被分配到xml
变量
如您所见,在您尝试访问之前,收到的数据不会分配给xml
var。如果您只想要一个单独的块来处理XML数据,为什么不创建一个单独的函数并将其作为参数传递?
$(function() {
$.get(
"ews_cal_finditem.xml",
parseXML,
"xml");
});
function parseXML(data) {
// This is the callback function
alert(data);
}
甚至
$(function() {
$.get(
"ews_cal_finditem.xml",
function(data){
parseXML(data);
},
"xml");
});
function parseXML(xml) {
alert(xml);
}
答案 1 :(得分:0)
您也可以将ajax调用作为async = false运行,但这应该小心,因为它会阻止进一步执行直到它完成。从AJAX中取出A时必须小心。