2014-08-03 3 views
0

У меня есть файл JSON со всеми моими данными в нем, и я хочу прочитать его в массиве в моем скрипте .. ниже вы можете увидеть попытку, но не кажется, что "реквизит" на самом деле получает данные. Поскольку я новичок в javascript, я предполагаю, что что-то простое отсутствует, надеясь, что кто-то скажет мне, что я делаю неправильно при загрузке массива.JSON to Array не работает

Если я вызываю предупреждение (запись) внутри цикла, он выдает «0», «1», «2», увеличивая при каждом цикле, если я пытаюсь предупредить (record.Address1), он возвращает «undefined», как эта работа?

var props = []; 
$.getJSON('http://someurl/auction.json', function(json) { 
    for (var record in json) 
    { 
     props.push(
      record.Address1, 
      record.City, 
      record.State, 
      record.Zip, 
      record.Bed, 
      record.Bath, 
      record.Price, 
      record.LotSize, 
      record.SQFT, 
      record.YearBuilt, 
      "10%", 
      record.latitude, 
      record.longitude, 
      record.Description 
     ); 
    }  
}); 

Вот первые пару записей в файле JSON

[ 
     { 
     "TrusteeNumber":"WA-14-611878-TC", 
     "Date":"8/8/2014 8:00", 
     "Address1":"7616 East Nora Avenue", 
     "Address2":"", 
     "County":"Spokane", 
     "State":"WA", 
     "Zip":99212, 
     "Description":"Description for 7616 East Nora Avenue, Spokane Valley, Spokane, WA 99212\n\n\n\n\n \n Important Documents \n\n\nTrustee Sale Terms and Conditions \n\nSample Trustee Deed Upon Sale \n\nSample Certificate of Sale/Receipt \n\nIRS Form 8300", 
     "City":"Spokane Valley", 
     "AssetType":"Residential", 
     "PropertyType":"SFR", 
     "Beds":3, 
     "Baths":1, 
     "YearBuilt":1950, 
     "SQFT":"1,160", 
     "LotSize":0.25, 
     "APN":"45073 0265", 
     "EventItemNumber":"E2010-320", 
     "PropertyID":1706957, 
     "Image":"http://cdn.mlhdocs.com/rcp_files/auctions/E-2010/photos/thumbnails/155290117-1_bigThumb.jpg", 
     "latitude":47.672913, 
     "longitude":-117.301561 
     }, 
     { 
     "TrusteeNumber":"WA-14-611501-TC", 
     "Date":"8/8/2014 8:00", 
     "Address1":"235 W Columbia Ave", 
     "Address2":"", 
     "County":"Spokane", 
     "State":"WA", 
     "Zip":99205, 
     "Description":"Description for 235 W Columbia Ave, Spokane, Spokane, WA 99205\n\n\n\n\n \n Important Documents \n\n\nTrustee Sale Terms and Conditions \n\nSample Trustee Deed Upon Sale \n\nSample Certificate of Sale/Receipt \n\nIRS Form 8300", 
     "City":"Spokane", 
     "AssetType":"Residential", 
     "PropertyType":"SFR", 
     "Beds":3, 
     "Baths":3, 
     "YearBuilt":1947, 
     "SQFT":"3,151", 
     "LotSize":0.15, 
     "APN":"36311 3601", 
     "EventItemNumber":"E2010-307", 
     "PropertyID":1707641, 
     "Image":"http://cdn.mlhdocs.com/rcp_files/auctions/E-2010/photos/thumbnails/208185496-1_bigThumb.jpg", 
     "latitude":47.7107249, 
     "longitude":-117.415536 
     }] 
+1

Пожалуйста, не изменяйте вопрос, если у вас есть другой вопрос, тогда опубликуйте новый вопрос. – Musa

ответ

0

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

<script type="text/javascript"> 

     var props = [], returnData; 
    function initialize() { 
$(document).ready(function() { 
    $.ajax({ 
     url: "http://5i2.us/jacksonmashup/allResults.json", 
     async: false, 
     dataType: 'json', 
     success: function (data) { 
      returnData = data; 
     } 
    }); 

    var len = returnData.length; 
    for (var i = 0; i < len; i++){ 
     var record = returnData[i]; 
     props.push([ 
      '<img src="' + record.Type + '"/>', 
      record.Address1, 
      record.City, 
      record.State, 
      record.Zip, 
      record.Beds, 
      record.Baths, 
      record.Price, 
      record.SQFT,    
      record.LotSize, 
      '10%', 
      record.latitude, 
      record.longitude, 
      record.Description, 
      record.Image, 
      record.Type] 
     )    
    }; 
     }); 
    } 
</script> 
1

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

for (var record in json) 
{ 
    props.push(
     json[record].Address1, 
     json[record].City, 
     json[record].State, 
     .... 
    ); 
} 

В качестве альтернативы вы можете попробовать ниже, а также и это будет вести себя так же, как Еогеасп в других языках программирования:

$(json).each(function(index, record) { 
    props.push(
     record.Address1, 
     record.City, 
     record.State, 
     .... 
    ); 
}); 

Надежда это помогу.

0

С for (var record in json), record на самом деле не является записью, о чем свидетельствуют предупреждения, то, что она делает, перечисляет имена свойств в объекте и поскольку json является записью массива, это индексы этого массива.
Если вам нужны записи массива, вам нужно будет сделать json[record].Address1.

Я также предлагаю не используя для в цикле для массива, тем

for (i = 0; i < json.length; i++) 

сделать это намного более ясно, что вы зацикливание массив

0

Ваш цикл не используется правильно, в for(var record in json), запись - это индекс, который в этом случае 0, 1. чтобы заставить его работать, попробуйте следующее:

for (var key in json) 
    { 
     var record = json[key]; 
     props.push(
      record.Address1, 
      record.City, 
      record.State, 
      record.Zip, 
      record.Bed, 
      record.Bath, 
      record.Price, 
      record.LotSize, 
      record.SQFT, 
      record.YearBuilt, 
      "10%", 
      record.latitude, 
      record.longitude, 
      record.Description 
     ); 
+0

ok, поэтому я использовал этот метод, и он заполняет массив реквизитов, но затем сразу же после выхода из подпрограммы реквизит получает значение null. Я заполняю массив в методе initialize(), а затем пытаюсь использовать переменную реквизита в событии $ (document) .ready, но он пустой. – Garin

+0

может быть проблемой с объемом, попытаться объявить реквизиты снаружи всего и внутри вашего ajax, вместо использования 'props.push (...' use 'window.props.push (...' – Khalid

+0

Я разместил ответ ниже, чтобы включить код, в основном я делал это, просто не используя window.props. нажмите, но он по-прежнему сбрасывается на нуль – Garin