User 7923865 Ответов: 1

Как заполнить HTML-список с помощью данных json


У меня есть веб-сервис, который был построен для передачи данных Json. Я могу проверить, что данные передаются и находятся в формате Json. У меня есть вызов JavaScript AJAX, который должен подключиться к веб-сервису и получить данные. Я вижу, что это работает, потому что у меня есть предупреждение, которое показывает мне данные Json. Моя дилемма заключается в том, что я видел множество различных способов заполнения списка, но попробовав несколько из них, я не смог заставить их работать с моими данными. Я в тупике.

Что я уже пробовал:

Мои данные Json:
{  "Batches": [    {      "ID": 1,      "product": "123117C"    },    {      "ID": 2,      "product": "123116B"    },    {      "ID": 3,      "product": "123116A"    },    {      "ID": 4,      "product": "123017B"    },    {      "ID": 5,      "product": "123016D"    },    {      "ID": 6,      "product": "122917A"    },    {      "ID": 7,      "product": "122916C"    },    {      "ID": 8,      "product": "122817D"    },    {      "ID": 9,      "product": "122817C"    },    {      "ID": 10,      "product": "122816B"    }  ],  "Table1": [    {      "id": 0,      "item": "item 0"    },    {      "id": 1,      "item": "item 1"    }  ]}


HTML - код, в котором находится listbox:

<div class="col-lg-12">
  <select path="lstObjects" id="lstObjects" name="BatchID">
 
  </select>
</div>


Мой Javascript, который должен заполнять список при загрузке документа:

function GetBatchData() {
   		
   		$.ajax({
   			type: 'GET',
   			url: 'http://192.168.1.103/Web%20Service/Service.asmx/GetBatchData',
   			dataType: 'json',
   			contentType: 'application/json;charset=utf-8',
   			success: function(product) {
   				var products = JSON.parse(product.d);
//    				var names = product.d;
//    				alert(product);
				$.each(products, function(index, value) {
        		$('#lstObjects').append($('<option>').text(value).val(index));
    			});
					
            },
   			failure: function(error) {
   				 alert(error.d); 
   			}
   		});
   };


Прямо сейчас этот Javascript не имеет попытки заполнить список. Самое близкое, что я сделал, это взял все записи из вызова Json и вставил их в одну строку в списке. Моя конечная цель в этом проекте-позволить пользователю выбрать элемент listbox, и этот элемент будет связан с переменной в Javascript для обновления функции plot, которая у меня есть.

j snooze

попробуйте использовать функцию JSON.parse() для ваших результатов(например, var products = JSON.parse(product), которая должна установить "products" в массив возвращаемых объектов, а затем вы можете просто выполнить цикл и добавить элементы в свой список). Возможно, Вам сойдет с рук просто использование каждого из них, и переход по этой ссылке может немного помочь. https://stackoverflow.com/questions/21007304/populate-listbox-options-with-result-of-an-ajax-call-using-query-in-spring-mvc-e

[no name]

Я попробовал предложение от J дремоту и я получаю сообщение об ошибке в формате JSON.синтаксического анализа: синтаксис ошибка: JSON для.разбор: неожиданный символ в строке 1 столбца 2 из JSON данных. Если я удалю присвоение переменной products и назначу переменную product каждому циклу, то получу одну запись в списке, но она содержит все элементы JSON.

F-ES Sitecore

Это "product.d", на котором вам нужно сделать JSON.parse, а не "product"

F-ES Sitecore

Обновите вопрос, чтобы включить код, который обновляет список. Мы не можем сказать вам, что не так с кодом, который мы не видим.

1 Ответов

Рейтинг:
11

F-ES Sitecore

Если вы посмотрите на свой JSON, он имеет два свойства: пакеты и Table1. Когда вы проходите через json, вы проходите через эти два свойства. Когда вы затем делаете "text(value)" в свойстве Batches, как javascript представляет это в виде текста? Он не может этого сделать, поэтому вместо этого он использует информацию о типе, которая является источником вашего [object Object], а затем делает то же самое для таблицы 1.

То, что вы, вероятно, на самом деле хотите сделать, - это перебрать список продуктов в свойстве Batches и использовать идентификатор каждого свойства в качестве значения, а свойство product-в качестве текста, но нигде в вашем коде вы этого не делаете.

Итак, сначала вы хотите сделать цикл через пакеты

$.each(products.Batches, function(index, value) {


Далее при создании опции вы хотите использовать идентификатор и значения продукта

$('#lstObjects').append($('<option>').text(value.product).val(value.ID));


[no name]

Это все исправило. Спасибо.