2014-11-07 1 views
0

я пытаюсь сделать JQuery автозаполнения щ с некоторыми странами я получаю от БД с помощью AJAX вызоваJQuery автозаполнения с Ajax вызова, чтобы создать массив

Я изо всех сил о том, как передать мою таблицу значений для автозаполнения

$(document).ready(function() { 

    $.ajax({ 
     url:Routing.generate('e_veilleur_user_register_countries_autocomplete'), 
     type:"get", 
     dataType: 'json', 
     data: 'test=cool', 
     async: true, 
     cache: true, 
     success: function(data){ 
      var availableTags = data; 
     } 
    }); 

    $("#fos_user_registration_form_pays").autocomplete({ 
     source: availableTags 
    }); 
    }); 

в результате моего AJAX вызова

[{"countryName":"United States"}, 
{"countryName":"Canada"}, 
{"countryName":"Afghanistan"}, 
{"countryName":"Albania"}, 
{"countryName":"Algeria"} 

Ошибка дано: availableTags is not defined

+0

AJAX является асинхронным, вы используете 'имеющиесяTags' до завершения AJAX. jQuery Autocomplete позволяет указать URL-адрес AJAX в опции 'source:', используйте это. – Barmar

+0

действительно! но поместить URL-адрес будет называть ajax каждый раз, когда я печатаю буклет, не так ли? я хотел бы загрузить весь массив в начале, возможно ли это? или я ошибаюсь и ставил url preloads массив – oligan

ответ

2

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

$("#fos_user_registration_form_pays").autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
     url:Routing.generate('e_veilleur_user_register_countries_autocomplete'), 
     type:"get", 
     dataType: 'json', 
     data: 'test=cool', 
     async: true, 
     cache: true, 
     success: function(data){ 
      response(data); 
     } 
    }); 
    } 
}); 

jQuery UI Autocomplete Source

Редактировать

Я не видел комментарий, до сих пор. Отвечая на этот конкретный комментарий, вы можете просто вызвать автозаполнение из AJAX.

$.ajax({ 
    url:Routing.generate('e_veilleur_user_register_countries_autocomplete'), 
    type:"get", 
    dataType: 'json', 
    data: 'test=cool', 
    async: true, 
    cache: true, 
    success: function(data){ 
     $("#fos_user_registration_form_pays").autocomplete({ 
     source: data 
     }); 
    } 
});