импортировать значения XML? - PullRequest
2 голосов
/ 28 июля 2011

Предположим, у меня есть простой 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 ]

3 голосов
/ 28 июля 2011

Проблема здесь в том, что вы делаете асинхронный вызов ajax.Либо вы используете $ .ajax и устанавливаете, чтобы вызов не был асинхронным, либо если вам нужно использовать данные xml, вы должны вызвать функцию в функции успеха вызова $ .get.

, например, вы можетеделать:

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 голос
/ 28 июля 2011

Вы можете сделать это следующим образом.

var myObject = {};

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

HOWEVER , если вы поместите код, который обрабатывает xml сразу после $.ajax(), вы столкнетесь со всеми видами ошибок, потому чтовызов не будет завершен.

Лучше, чтобы вы поместили всю свою логику в функцию успеха, например, так.

$.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, чтобы сделать запроссинхронно, но это считается плохой практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...