2010-11-18 76 views
0

我一直在试图弄清楚如何使用原型来初始化一个对象以便使用全局变量进行转义,这是我第一次了解到here。我开始在接受的答案中实现自己的代码版本。使用对象来正确替换全局变量

function XML_Data() { 
    this.data = null; 
} 

XML_Data.prototype = { 
GetXML: function() { 
    $.ajax({ 
    type: "GET", 
    url: "questions.xml", 
    dataType: "xml", 
    success: function(xml) { 
    this.data=xml; 
    } //close success 
    });//close AJAX 
}, 

UseXML: function() { 
    alert(this.data) 
} 
}; 

(我的执行脚本)


不过,我碰到的一个问题。当我使用这一位代码运行此处显示的功能时:

var data = new XML_Data(); 
data.GetXML(); 
data.UseXML(); 

我收到一条警报,提示“null”。我已经经历了十几次代码,但由于这是我第一次使用Javascript,所以显然有一些我错过了。你能指出吗?

谢谢Elliot Bonneville。

+0

你想立即使用Ajax的数据?您通过Ajax获得新数据的频率如何? – 2010-11-18 01:42:50

+0

只需一次,在通话开始时。 – 2010-11-18 02:10:20

回答

2

刚刚记下的jQuery中

var data = new XML_Data(); 
data.GetXML(); //This will run the ajax request 
data.UseXML(); //This will most likely run before the ajax request is finished. 

发布事件会problably工作,但我还没有测试此代码。

function XML_Data() { 
    this.data = null; 
} 

XML_Data.prototype = { 
GetXML: function() { 
    $.ajax({ 
    type: "GET", 
     url: "questions.xml", 
    dataType: "html", 
    success: function(xml) { 
    this.data=xml; 
    $(window).trigger("myAjaxEvent"); 
    } //close success 
    });//close AJAX 
}, 

UseXML: function() { 
    alert(this.data) 
} 
}; 


$(document).ready(function() { 
    var data = new XML_Data(); 
    $(window).bind("myAjaxEvent", function() { 
     data.UseXML(); 
    }); 

    data.GetXML(); 

}); 
+0

是这样吗?我将如何解决这个问题? – 2010-11-18 01:26:54

+0

@Elliot ...你可以尝试使用jQuery发布事件 – 2010-11-18 01:50:59

+0

啊,是的,这可以工作。谢谢。 – 2010-11-18 02:15:16

0

您现在使用的代码正尝试使用非阻塞异步API同步(按顺序)运行。 UseXML调用发生在GetXML调用实际完成其AJAX事物之前,因为它是异步的。

你可以用异步模式(在这种情况下this.UseXML直接调用AJAX请求的成功)或同步模式(在其中“async:false”传递给AJAX调用)来编写它。异步模式在JavaScript开发中非常普遍,因为它更强大,并且同步请求通过阻止脚本执行来阻止浏览器中的用户界面,但同步操作对于小事情要容易得多。

http://api.jquery.com/jQuery.ajax/