0

我还有另一个 javascript/jQuery 的变量范围问题要问...

假设我声明了一个名为 Container 的对象。其中有一个名为 myimage 的变量,它将从某个 xml 文件中读取地址。

 Container = function()
 {
   var myimage;
 }

 Container.prototype.readXML = function()
 {
   $.get("assest/xml/images.xml",function(xml)
{
    //Read in URL path from XML file, and store them into memeber variables
    myimage = $(xml).find('background').text();
    //Apply background image into body, and apply css styple into it
    $("body").css('background-image','url(' + myimage + ')');
            //This alert will work
            alert(myimage);
});
            //This alert gives not defined variable
    alert(myimage);
  }

请看两个警报部分。看来我在 Container 对象中定义的这个变量只能在 readXML 函数中工作。但不出来。我不明白为什么会这样。

我确实使用了其他一些符号,比如用 this.myimage 声明并在执行 $.get 函数之前通过将 this 的名称更改为 self 来访问它 var self= this;

但它变得更糟。有时在 get 函数中甚至无法再访问它。

你能帮我解决这个问题吗?我的最终目标是该对象中的一个数组,并从 XML 中读取大量数据,而不是将它们显示为 HTML。如果无法达到我在 Object 中设置的变量,我就无法做到这一点。

谢谢!!

4

2 回答 2

1
 Container = function()
 {
   var myimage;
 }

应该很可能定义如下。更重要的是,$.get它是异步的,因此您不能假设它按照编写的顺序完成每一行代码

 var Container = function()
 {
   this.myimage = '';
 }

Container.prototype.readXML = function(callback) {
    $.get("assest/xml/images.xml", function(xml) {
        //Read in URL path from XML file, and store them into memeber variables
        this.myimage = $(xml).find('background').text();
        //Apply background image into body, and apply css styple into it
        $("body").css('background-image', 'url(' + this.myimage + ')');
        //This alert will work
        callback(this.myimage);
    });
}​

var instance = new Container();
instance.readXML(function (copy) {
    alert(copy);
});​
于 2012-08-23T17:21:51.263 回答
0

Javascript 中未在全局范围内声明的所有变量对于声明它们的函数都是局部的。

由于函数是 Javascript 中的对象,因此您可以为它们分配属性。所以,你可以做

Container.myimage = $(xml).find('background').text();
//...
alert(Container.myimage);
于 2012-08-23T17:22:14.187 回答