导入XML值?

时间:2011-07-27 20:30:26

标签: jquery xml ajax get

假设我有一个只有一个项目的简单XML ...

<myXML>
   <valuesItem
      name = 'name'
      age = 'age'
      gender = 'gender'
   />
</myXML>

...并且只想将项目的属性值导入为jQuery对象的新值,如下所示......

var myObject = {
        name: 'name',
        age: 'age',
        gender: 'gender'
};

......我怎么回事???

我试图实现这样的目的但到目前为止我没有成功:

var myObject = {};

$.get(myXML.xml, function(xmlData) {
      var xmlValues = {};

      $(xmlData).find('valuesItem').each(function() {
             var $item = $(this);
             xml Values = {
                    name: $item.attr('name'),
                    age: $item.attr('age'),
                    gender: $item.attr('gender')
             };
      });

      $.extend(myObject, xmlValues);
});

如何公开$ .get()返回结果?

2 个答案:

答案 0 :(得分:3)

这里的问题是你正在进行异步的ajax调用。要么使用$ .ajax并将调用设置为不是异步,要么必须使用xml数据,则必须在$ .get调用的success函数中调用函数。

例如,你可以这样做:

var myObject = {};

$.ajax({
  type: 'get',
  url: 'myXML.xml',
  dataType: 'xml',
  async: false, 
  success: function ( xmlData ) {

      $(xmlData).find('valuesItem').each(function() {
             var $item = $(this);
             myObject = {
                    name: $item.attr('name'),
                    age: $item.attr('age'),
                    gender: $item.attr('gender')
             };
      });
  }  
});
//here myObject is set because it waits for the call to finish

答案 1 :(得分:1)

你可以这样做。

var myObject = {};

$.ajax({
  type: 'get',
  url: 'myXML.xml',
  dataType: 'xml',
  success: function ( data ) {
    myObject = data;
  }  
});

HOWEVER ,如果您在$.ajax()之后直接放置处理xml的代码,则会遇到各种错误,因为调用尚未完成。

最好将所有逻辑放在成功函数中,如此...

$.ajax({
  type: 'get',
  url: 'myXML.xml',
  dataType: 'xml',
  success: function ( data ) {
    //do stuff with data here
    //the variable "data" holds all of your xml, parsed into a JavaScript object
  }  
});

因为服务器已响应请求,所以不会调用成功。

编辑:您可能会为您的特定用例做更好的事情。

首先定义一个带参数data的函数并设置插件

startPlugin = function ( data ) {
    var newoptions = {};
    newOptions.name = data.myXML.valuesItem.name;
    newOptions.age = data.myXML.valuesItem.age;
    newOptions.gender = data.myXML.valuesItem.gender;

    //start the plugin here with newOptions
}

然后,将该函数作为成功回调传递给ajax。

$.ajax({
  type: 'get',
  url: 'myXML.xml',
  dataType: 'xml',
  success: startPlugin  
});

同样在$.ajax()中,您可以将async设置为false以使请求同步,但这被视为不良做法。