2013-02-20 3 views
0

Я пытаюсь заполнить выпадающее поле из файла XML с помощью jQuery. Когда код запускается, он выглядит выполненным по порядку.Populate drop down from XML-код, выполняющийся в неправильном порядке

JQuery:

$("#filterButton").click(function() { 
    var dropdown = new Array(); 
    $.get('../restaurants.xml', function (xmlFile) { 
     $(xmlFile).find('restaurant').each(function() { 
     var found = false; 
     var $restaurant = $(this); 
     var type = $restaurant.attr("type"); 

     dropdown.forEach(function(arrayValue){ 
      if(arrayValue == type){ 
      found = true; 
      } 
     }); 
     if(found == false){ 
      dropdown.push(type); 
     } 
     }); 
    }); 
    $('#potentialRestaruants').append('<select>'); 
     dropdown.forEach(function(arrayValue){ 
     $('#potentialRestaruants').append('<option value="' + arrayValue + '">' + arrayValue + '</option>'); 
     }); 
     $('#potentialRestaruants').append('</select>'); 
    }); 

Однако код запущен в следующем порядке:

$("#filterButton").click(function() { 
    var dropdown = new Array(); 

затем

$('#potentialRestaruants').append('<select>'); 
     dropdown.forEach(function(arrayValue){ 
     $('#potentialRestaruants').append('<option value="' + arrayValue + '">' + arrayValue + '</option>'); 
     }); 
     $('#potentialRestaruants').append('</select>'); 
    }); 

затем

$.get('../restaurants.xml', function (xmlFile) { 
    $(xmlFile).find('restaurant').each(function() { 
    var found = false; 
    var $restaurant = $(this); 
    var type = $restaurant.attr("type"); 

    dropdown.forEach(function(arrayValue){ 
     if(arrayValue == type){ 
     found = true; 
     } 
    }); 
    if(found == false){ 
     dropdown.push(type); 
    } 
    }); 
}); 

Почему код запускается в этом порядке и как я могу запустить его в том порядке, в котором я нуждаюсь?

ответ

1

Выполняется в том порядке, в котором вы описываете, потому что $ .get выполняется асинхронно. Таким образом, любой код, который зависит от успешного выполнения функции $ .get, также должен быть включен в конце этой функции I.e. добавление и второе для каждого.