2013-07-20 3 views
0

Я пытаюсь заполнить выпадающее меню HTML с данными из внешнего JSON-файл, который содержит следующиеЗаливка HTML выпадающий список с данными файла внешнего JSON

{ 
    "Destinations": [ 
    { 
     "destinationName": "London", 
     "destinationID": "lon" 
    }, 
    { 
     "destinationName": "New York", 
     "destinationID": "nyc" 
    }, 
    { 
     "destinationName": "Paris", 
     "destinationID": "par" 
    }, 
    { 
     "destinationName": "Rome", 
     "destinationID": "rom" 
    } 
    ] 
} 

То, что я хотел бы это выпадающее меню отображать имя destinationName, например, Лондон, Нью-Йорк и т. д., но я смущен, как подойти к этому.

Любая помощь приветствуется.

+0

Возможный дубликат: http://stackoverflow.com/questions/2342371/jquery-loop-on-json-data-u петь - каждый – melancia

+0

см. мой ответ здесь http://stackoverflow.com/a/9995132/740639 –

ответ

0

Создайте тег <select> в своем html и заполните его <option>, используя атрибут value. Value будет вашим destinationID, но он покажет destinationName.

Example

<form action="demo_form.asp"> 
    <select name="cars"> 
     <option value="volvo">Volvo XC90</option> 
     <option value="saab">Saab 95</option> 
     <option value="mercedes">Mercedes SLK</option> 
     <option value="audi">Audi TT</option> 
    </select> 
    <input type="submit" value="Submit"> 
</form> 
0

Попробуйте этот код:

$.getJSON('yourfile.json', function(data) { 
    destinations = data['Destinations'] 

    $.each(destinations, function(id, destination) { 
     destination = destination["destinationName"] 
     alert(destination) 
    }) 
}); 

Это позволяет получить значение назначения в целевой переменной, поскольку, после, может делать все со значениями этой переменной.

0

Рассмотрим вы получили ответ от сервера, как

{ 
    "Destinations": [ 
    { 
     "destinationName": "London", 
     "destinationID": "lon" 
    }, 
    { 
     "destinationName": "New York", 
     "destinationID": "nyc" 
    }, 
    { 
     "destinationName": "Paris", 
     "destinationID": "par" 
    }, 
    { 
     "destinationName": "Rome", 
     "destinationID": "rom" 
    } 
    ] 
} 

Тогда ваш следующий шаг должен быть итерация этого JSON

$.each(data.Destinations, function(key, val) { 
    items.append('<option value="' + val.destinationID + '">' + val.destinationName + '</option>'); 
    }); 

вы можете увидеть демо здесь Fiddle Demo

0

Использование each и appendselect примерно:

$.each(data.Destinations, function(i, v) { 
    $('#destinations').append('<option value="' + v.destinationID + '">' + v.destinationName + '</option>'); 
}); 

jsFiddle

Обновленный Пример (test.html для http://jonathangatenby.co.uk/Candidate/json/destinations.json)

<select id="destinations"> 
    <option value="">Select</option> 
</select> 
<a href="#" id="fetch">Fetch JSON</a> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    $('#fetch').click(function() { 
     $.post('http://jonathangatenby.co.uk/Candidate/json/destinations.json', {}, function(data) { 
      $.each(data.Destinations, function(i, v) { 
       $('#destinations').append('<option value="' + v.destinationID + '">' + v.destinationName + '</option>'); 
      }); 
     }); 
    }); 
}); 
</script> 

Пример работы убедитесь, что HTML-файл или файл, из которого вы делаете ajaxcall находятся на одном домене (jonathangatenby.co.uk)

+0

Привет, на примере jsFiddle он собирает адресаты, но как вы собираете JSON из внешнего файла, а не из Javascript? –

+0

Измените url '/ echo/json/'' на ваш 'url' и верните ответ в формате' json' с 'url' –

+0

Извините, возможно, объяснив это, но я думаю, что его не хватает. например, http://jonathangatenby.co.uk/Candidate/json/destinations.json Является ли файл URL JSON, который я попытаюсь использовать, это заменит '/ echo/json /? –

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