Здравствуйте,
У меня к вам пару вопросов
Первый:
подскажите пожалуйста как отсортировать данные получаемые с JSON файла.
Мне нужно отсортировать по ключу "v" - от большего к меньшему.
Файл имеет довольно глубокую вложенность , ссылка с урока
http://beta.javascript.ru/task/sortirovka-obektov не помогла из-за немного другой структуры файла.
Структура JSON файла:
[
{
"reg":"Peoria, AZ",
"bids":[
{
"ind":"Financial/Credit Card",
"v":"5.01"
},
{
"ind":"Telecom",
"v":"1.53"
},
{
"ind":"Retail/Personal Care & Cosmetics",
"v":"0.76"
}
],
"lat":"33.5695",
"lng":"-112.246",
"t":"20124241446054"
},
{
"reg":"Cottage Grove, WI",
"bids":[
{
"ind":"Retail/Consumer Electronics",
"v":"7.00"
},
{
"ind":"Telecom",
"v":"2.52"
}
],
"lat":"43.0707",
"lng":"-89.1983",
"t":"20124241446055"
},
{
"reg":"Ft Lee, CT",
"bids":[
{
"ind":"Financial/Investing",
"v":"89.98"
},
{
"ind":"Auto/Dealers",
"v":"12.01"
},
{
"ind":"Travel/Lodging",
"v":"1.72"
}
],
"lat":"40.8514",
"lng":"-73.9758",
"t":"20124241446056"
}
]
Сами данные формирую так:
<body>
<div id="content_btn"><input type=button class="btn" value="pause" onclick="continue_reporting = ( continue_reporting == 1 ) ? 0 : 1;">
<div id="content">
<div id="table-wrapper"></div>
</div>
<script type="text/javascript">
//Global Variables
var continue_reporting = 1;
var bids_displayed = 5;
var uls;
var data;
var counter = 0;
var total_number;
// initial run
$(document).ready(function(){
fetch_data();
});
//Processing Data from fetch data function
function process_data(data){
var delay_entry = 0;
$.each(data, function(key, value){
setTimeout(function(){pusher(value)}, 800 * delay_entry);
delay_entry++;
total_number = data.length;
})
}
//Getting Data from JSON File
function fetch_data(){
var url = 'js/list.json';
$.ajax({
url: url,
cache: false,
dataType: 'json',
data: data,
success: process_data
});
}
//Outputing Data into tables
function pusher(data){
if ( continue_reporting == 1 ){
var main_ul = "<table cellspacing='0' class='bid_table'>";
main_ul += "<thead><tr><th class='empty'> </th><th class='city'>" + data.reg + "</th><th class='bid'>Bid</th></tr></thead>";
for( var i = 0; i < data.bids.length; i++ ){
//Strip off everything after "/"
var industry = data.bids[i].ind;
var strip_industry = industry.split('/')[0];
//Aplying style for table row
if( i != data.bids.length -1 ){
main_ul += "<tbody><tr class='row'><td class ='pic'><img src='img/" + strip_industry + ".png' alt='image'></td><td class='industry'>" + strip_industry + "</td><td class='bid_price'>" + data.bids[i].v + "</td></tr></tbody>"
} else {
main_ul += "<tbody><tr class='row-last'><td class ='pic'><img src='img/" + strip_industry + ".png' alt='image'></td><td class='industry'>" + strip_industry + "</td><td class='bid_price'>" + data.bids[i].v + "</td></tr></tbody>"
}
} //End FOR loop
main_ul += "</table>";
$(main_ul).prependTo("#content").hide().fadeIn("slow");
counter++
if(counter == total_number ){
fetch_data();
counter = 0;
}
uls = $("#content").children();
//Counting elements and substracting last one
if (uls.length>100){
$(uls.get(uls.length-1)).remove();
}
} // END IF STATEMENT STATEMENT
} // END of PUSHER FUNCTION
//Changing Play/Pause Button
$("input[type='button']").toggle(
function(){
$(this).val("Play").toggleClass("pause");
},
function(){
$(this).val("Pause").toggleClass("pause");
}
);
</script>
</body>
Как я понимаю в функции pusher нужно создать массив и дополнительный цикл по которому и сортировать данные по ключу "v" и выводить это в таблицы. Подскажите как именно?
Второй вопрос: каким образом можно организовать правильную паузу вывода данных. В данный момент использую функцию которая флаг continue_reporting в положение 1 или 0 и подключаю ее на кнопку pause. Возникает очень интересная ситуация: пауза срабатывает если нажать на кнопку данные останавливаются , если нажать повторно данные выводятся дальше..Казалось бы все работает но стоит в режиме паузы повисеть несколько минут клавиша становится неработоспособной. Скрипт просто перестает реагировать на нажатие паузы и замерзает. Проверяю логи на количество проходов замерзает всегда на разных элементах массива. Каким образом можно это исправить?