JavaScript对象构造和赋值不起作用

时间:2011-07-26 21:42:10

标签: javascript jquery ajax object

有人能说出为什么我的对象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

2 个答案:

答案 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)

您遇到问题的原因是代码不按照您认为的顺序运行。

成功函数在异步请求返回时运行,而最后两个警报在发送请求后立即触发。您想要在最后两个警报中使用的数据尚不可用于浏览器。