2012-06-01 114 views
0
单个变量

假设你有一个data.xml文件:XML数据转换成使用JQuery

<?xml version="1.0" encoding="UTF-8" ?> 
<root> 
    <item>value1</item> 
    <item>value2</item> 
    <item>value3</item> 
</root> 

我想所有的数据配置存储到一个变量,以便使用它在我的.js代码中使用这样的:

$(document).ready(function() { 
     'use strict'; 
     jQuery.extend({ 
      getValues: function(url) { 
      var result = null; 
      $.ajax({ 
       url: url, 
       type: 'get', 
       dataType: 'xml', 
       async: false, 
       success: function(data) { 
       result = data; 
       } 
      }); 
       return result; 
      } 
     }); 

     results = $.getValues("data.xml"); 
     console.log(results); 
}); 

如果我刷新页面我得到的结果变量,像URL,基本URI,身体字段的文档对象...

如果我再次刷新我的成绩得到了#document与dat对象a from data.xml:

<root> 
    <item>value1</item> 
    <item>value2</item> 
    <item>value3</item> 
</root> 

所以每次有人转到url时返回的对象的类型都会发生变化。

我对这个两个问题:

  1. 我怎样才能使返回的值总是#document? (其中包含来自.xml文件的数据)

  2. 如何从#document访问元素?

我已经尝试使用:

console.log(results.root.item); 
console.log(results.find("item")); 

但两者给我的错误。

也许有更好的方法来做到这一点(意味着读取XML数据到一个单一的变量)。

有什么建议吗?

回答

1

您在返回结果的Ajax请求完成之前。 你必须等待AJAX​​返回,然后调用回调函数:

$(document).ready(function() { 
     'use strict'; 
     jQuery.extend({ 
      getValues: function(url, callback) { 
      var result = null; 
      $.ajax({ 
       url: url, 
       type: 'get', 
       dataType: 'xml', 
       async: false, 
       success: function(data) { 
        callback.call(this, data); 
       } 
      }); 
      } 
     }); 

     $.getValues("data.xml",function(data){ 
      console.log(data); 
     }); 

}); 
+0

你是对的,但为了使它工作,我不得不删除“异步”属性。现在我只需要知道如何访问数据变量中的元素。 – rfc1484

+0

@ rfc1484哦,我错过了异步选项。因为你的数据是xml,你可以使用常规的jquery来访问元素:'var xml = $(data);'然后例如'xml.find('someelement')。attr('someattribute');'' – Andy

0

你可以用这种方式选择XML标签:

success: function(data) { 
    parser(data); 
} 

function parser(data) { 
... 
} 
+0

但我想选择XML标签阿贾克斯成功函数外,一旦XML已经归还。 – rfc1484

+0

@ rfc1484你可以创建一个函数并将ajax数据传递给它。 – undefined