2009-08-16 3 views
1

Я не уверен, что это возможно, я работаю над сайтом, на котором у меня нет доступа к каким-либо MYSQL или базе данных. Ни PHP. Дешевый клиентНесколько XML с привязкой данных?

Несмотря на то, что у меня есть 3 файла XML с различными частями данных, я поместил «ключ», который соответствует друг другу. Я считаю, что простой оператор IF выполнит сопоставление.

Однако, как лучше всего вызвать 3 XML-файла и вытащить данные из них и объединить их в цикл.

Вот код, который работает, чтобы вытащить один из них:

$.ajax({ 
    type: "GET", 
    url: "xml/classes.xml", 
    dataType: "XML", 
    beforeSend: function(){ 
    $('#classContainer').append("<p>Loading</p>");}, 
    success: function(xml) { 
    $(xml).find('monday').each(function(){ 

      var $classdate = $(this); 
      var title = $classdate.find("class").attr('title'); 

      var level = $classdate.find("class").attr('classLevel'); 
       var time = $classdate.find("time").text(); 
       var duration = $classdate.find("time").attr("duration"); 
       var hourofday = $classdate.find("time").attr("hourofday"); 
       var location = $classdate.find("location").text(); 



      var Monhtml = '<div class="classBlock">'; 

      Monhtml += '<p class="title">' + title + '<span class="loadingPic" alt="Loading" /> ' + ' </p>'; 
       Monhtml += '<p class="infoBar"> <strong>Time:</strong>' + time + '<span class="hour">'+ hourofday +'</span><br>'+'<strong>Duration:</strong>' + duration +' Minutes <br>' + '<strong>Location:</strong>' + location + '<br><strong>Instructor:</strong> </p>'; 
       Monhtml += '<p class="description"> <span class="level">' + level + '</span></p>' ; 

      Monhtml += '</div>'; 


      $('#classContainer').append($(Monhtml)); 
     }); 
     } 
    }); 

Я хотел бы создать переменную для размещения в «monHTML» Я бы набор переменных из 3 XML документов все слиты в "monHTML" var.

Любые идеи "?

ответ

1

Поскольку вы не можете объединить файлы на сервере, вам нужно будет выполнить 3 независимых запросов AJAX. Трудность состоит в синхронизации 3 запроса. Они могут быть выполнены синхронно, но это будет безусловно, больно производительность и может привести к тайм-ауты лучший способ быть отправить 3 запроса асинхронно и вызвать функцию обратного вызова после того, как 3 запроса завершения:..

var addreses = ['xml/file1.xml', 'xml/file2.xml', 'xml/file3.xml']; 

var ajaxQueue = { 
    files   : [], 
    checkFinished : function() { 
     if (this.files.length == addresses.length) { 
      // You can work with the 3 xml files here... 
      // this.files will be an array of elements that contain 
      // url and xml parameters. Check the url parameter to identify the 
      // corresponding xml. 
      // Remark: as the order in which the requests finish can vary, the array 
      // will not be sorted. 
     } 
    }; 
}; 

$(addreses).each(function(index, address) { 
    $.ajax({ 
     url  : address, 
     dataType : 'xml', 
     success : function(data) { 
      ajaxQueue.files.push({ url: address, xml: data }); 
      ajaxQueue.checkFinished(); 
     } 
    }); 
}); 
+0

Это похоже на лучший вариант до сих пор, другая проблема заключается в том, как подключить определенные данные от 1 к другому. Можете ли вы подключить его, чтобы выбрать, с чем сравнивать? – matthewb

0

Ваш клиент может быть в состоянии позволить себе родную базу данных XML Несколько являются бесплатными и хорошими - eXist-org. - это место для начала. Затем вы можете использовать XQuery для решения эта проблема более легко.

Смежные вопросы