JavaScript глобальный, не ограничивающий возможности? создание объекта json для автозаполнения
Привет! Я пытаюсь автоматически заполнить список городов, но возвращенный объект json не отформатирован для использования в автозаполнении, для которого требуется поле с именем "label":"cityname", чтобы отобразить автозаполнение, поэтому я пытаюсь переформатировать объект json, используя вызов ajax и запись его в глобальную переменную, проблема в том, что после возврата вызова ajax мой jsData становится [] пустым массивом... Что я делаю не так? и почему глобальная переменная не сохраняет значение?
http://www.andymatthews.net/read/2012/03/27/jQuery-Mobile-Autocomplete-now-available
<script>
$("#nec").bind("pageshow", function(e) {
var jsData = [];
$.ajax({
url: "http://localhost:8084/REST/resources/cities",
data:{},
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp: 'jsonp',
jsonpCallback: 'jsoncallback',
error: function(error){
console.log(error);
},
success: function(result) {
for (i = 0; i < result.length; i++){
jsData.push({label:result[i].name, value:result[i]});
}
console.log(JSON.stringify(jsData));
},
});
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
});
</script>
Я немного свеж на фронте JS, поэтому есть несколько вещей, которые я до сих пор не освоил
2 ответа
Проблема в том, что jsData
не глобальный, но ограниченный внутри анонимной функции.
var jsData = []; // make that here.
$("#nec").bind("pageshow", function(e) {
$.ajax({
url: "http://localhost:8084/REST/resources/cities",
data:{},
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp: 'jsonp',
jsonpCallback: 'jsoncallback',
error: function(error){
console.log(error);
},
success: function(result) {
for (i = 0; i < result.length; i++){
jsData.push({label:result[i].name, value:result[i]});
}
console.log(JSON.stringify(jsData));
},
});
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
Хотя я бы не советовал глобальную переменную. Но если это работает для вас, это ваше желание.
Вы должны положить
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
в вашем success()
функция.
Так как, jsData
становится обновлением в течение success()
, Исполнение pageshow
анонимная функция события быстрее, чем выполнение success()
, Итак, в рамках этой функции jsData
оставайтесь пустыми.
Вы можете получить данные через автозаполнение себя. Посмотреть здесь