Intereting Posts

Вытягивание JSON через AJAX для заполнения Drop-Down

Я собираю данные JSON, которые будут меняться … например:

Возвращенные данные могут быть:

[{"userID":"2779","UserFullName":" Absolute Pro-Formance"},{"userID":"2780","UserFullName":" AR Fabrication"},{"userID":"2781","UserFullName":" Banda Lucas Design Group"}] 

или:

 [{"orderID":"112958","OrderName":"Order ID: 112958"},{"orderID":"112957","OrderName":"Order ID: 112957"},{"orderID":"112956","OrderName":"Order ID: 112956"}] 

Я пытаюсь сделать это JSON для создания списка <select> .

 // Load in a drop-down as JSON function LoadDropDown($url, $where, $id, $selectName){ var $loading = '<div class="pageLoader" style="margin:0 auto !important;padding:0 !important;"><img src="/assets/images/ajax-loader.gif" alt="loading..." height="11" width="16" /></div>'; var $t = Math.round(new Date().getTime() / 1000); var $container = jQuery($where); var options = { url: $url + '?_=' + $t, cache: false, type: 'POST', beforeSend: function(){ $container.html($loading); }, success: function(data, status, jqXhr){ $html = '<select class="form-control" id="'+$selectName+'" name="'+$selectName+'">'; $html += '<option value="0">- Select an Option -</option>'; for(var i = 0; i < data.length-1; ++i) { var item = data[i]; console.log(item.userID); } $html += '</select>'; $container.html('<pre>' + data + '</pre>'); }, complete: function(jqXhr, status){}, error: function(jqXhr, status, error){ $container.slideDown('fast').html('<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button><i class="fa fa-exclamation-triangle fa-4x pull-left"></i><p><strong>Danger Will Robinson!</strong><br />There was an issue pulling in this page. Our support team has been notified, please check back later.</p></div>'); } }; jQuery.ajax(options); } 

У меня проблема: # 1 console.log(item.userID); всегда показывает undefined , и # 2 как я могу эффективно динамически строить параметры? Возвращенный JSON будет ВСЕГДА содержать 2 элемента на row и id , а также name

ОБНОВИТЬ

 for(var $key in data){ var $val = data[$key]; for($j in $val){ console.log('name:' + $j + ' = ' + $val[$j]); } } 

Показывает мне, что мне нужно в Firefox Console … Но по 1 строке в строке для каждого (например, 1-го JSON) name:userID = 1234 следующее name:UserFullName = TheName строки name:UserFullName = TheName

Как я могу получить их, чтобы я мог построить мои <options> ?

С:

 for(var k in data) { console.log(k, data[k]); } 

Я вернулся:

 2955 Object { orderID="8508", OrderName="Order ID: 8508"} 

а также

 2955 Object { userID="1355", UserFulleName="Me Myself And I"} 

Вам не нужно использовать такой грязный код. Также в настройках Ajax dataType:"json"

 success:function() { var listB=$('#yourdropdownId'); listB.empty(); $.each(result, function (index, item) { listB.append( $('<option>', { value: item.userID, text: item.UserFullName }, '<option/>')) }); } 

Также $ .getJson вместо ajax, если вы хотите только получить json с сервера

 $.getJSON('@Url.Action(" "," ")', { "youparametername": yourdata}, function (data) { $.each(data, function (index, item) { }) }); 

внутри объекта опций обязательно используйте

 dataType: 'json' 

Или в обработчике успеха вы можете использовать

 JSON.parse(data) 

Cured: Изменен мой цикл, чтобы циклически перемещаться по каждому элементу в возвращаемом JSON, получить ключи и т. Д.

 var $dl = data.length; for(var $i = 0; $i < $dl - 1; ++$i) { var $keys = Object.keys(data[$i]); $html += '<option value="' + data[$i][$keys[0]] + '">' + data[$i][$keys[1]] + '</option>'; }