有人能说出为什么我的对象img不接受ajax调用之外的值吗?我还使用了构造函数来创建对象,但是这个函数也没有用。并且xml解析的值有效,我已经测试过了。如果我在成功事件中移动警报(img.location),将显示正确的值,但它不会在ajax函数之外..
请帮助......
function getImage(){
img = new Object();
$.ajax({
type: "GET",
url: "hvimage.xml",
dataType: "xml",
success: function(xmlData){
var randImageId = Math.floor(Math.random()*3);
$(xmlData).find("image").each(function(index, e){
if(index == randImageId){
img.id = $(this).attr("id");
img.location = $(this).find("location").text();
img.answer = $(this).find("answer").text();
}
});
},
error: function(xmdData){
alert("error");
}
});
alert("test");
alert(img.location); //Keep getting undefined here..
}
再次感谢,
WENN
答案 0 :(得分:6)
因为您的AJAX请求是异步,所以之后的代码在运行之前不会等待响应。
任何依赖于成功响应的代码都需要放入success:
回调中,或从function getImage(){
img = new Object(); // 1. create object
// 2. send request
$.ajax({
type: "GET",
url: "hvimage.xml",
dataType: "xml",
success: function(xmlData){
// 4. response is received, and callback runs
var randImageId = Math.floor(Math.random()*3);
$(xmlData).find("image").each(function(index, e){
if(index == randImageId){
img.id = $(this).attr("id");
img.location = $(this).find("location").text();
img.answer = $(this).find("answer").text();
}
});
},
error: function(xmdData){
alert("error");
}
});
// 3. fire alerts
alert("test");
alert(img.location); //Keep getting undefined here..
}
回调中调用。
{{1}}
答案 1 :(得分:1)
您遇到问题的原因是代码不按照您认为的顺序运行。
成功函数在异步请求返回时运行,而最后两个警报在发送请求后立即触发。您想要在最后两个警报中使用的数据尚不可用于浏览器。