2015-02-08 3 views
0

У меня есть json-файл, и когда я нажимаю кнопку, он отображает только последние данные json (Ipsum% 40). Но я хочу разобрать этот путь; он должен отображать "Lorem" в #choice1div и "Ipsum" в #choice2div. Как я могу это сделать? Вот мои коды ниже;У меня есть json-файл, и когда я нажимаю кнопку

JS:

$("#getdata-button").click(function() { 
    $.getJSON('json_data.txt', function(read_data) { 
    $.each(read_data.result, function(i, data) { 
     $("#choice1").html(data.option + data.percent); 
     $("#choice2").html(data.option + data.percent); 
    }); 
    }); 
}); 

HTML:

<button id="getdata-button">hello</button> 
<div id="choice1"></div><br> 
<div id="choice2"></div> 

JSON:

{ 
    "result": [{ 
    "option": "Lorem", 
    "percent": " %50" 
    }, { 
    "option": "Ipsum", 
    "percent": " %32" 
    }] 
} 
+0

Вы должны попытаться правильно отложить код, чтобы его было легче читать. И вы прочитали описание тега [tag: data]? ('НЕ ИСПОЛЬЗУЙТЕ ЭТУ ТАГУ! Этот тег безнадежно широк и на самом деле не говорит нам, о чем идет речь.) –

+3

Вы не должны делать« каждый »в своем случае, потому что вторая итерация заменит результаты первой итерации. Вместо этого используйте indexer индекса ('data [0] .option' и т. Д.). – Tommi

+0

* «Он отображает'% 40'! Вот мой JSON: ...% 50% 32 "* :) –

ответ

0

Во-первых, вместо сохранения файла в качестве json_data.txt, сохраните его как json_data.json. Обновите свой URL-адрес $.getJSON, чтобы найти его.

Во-вторых, в этом случае вам, вероятно, не нужно использовать $.each. Это позволит решить вашу проблему:

$("#getdata-button").click(function() { 
    $.getJSON('json_data.txt', function(read_data) { 
     $('#choise1').html(read_data.result[0].option + read_data[0].percent); 
     $('#choise2').html(read_data.result[1].option + read_data[1].percent); 
    }); 
}); 

Если вы на самом деле нужно использовать $.each, то это, как вы могли бы сделать это:

$("#getdata-button").click(function() { 
    $.getJSON('json_data.txt', function(read_data) { 
     $.each(read_data.result, function(i, data) { 
      $('#choise' + (i + 1)).html(data.option + data.percent) 
     }); 
    }); 
}); 
+0

Что касается второго фрагмента кода: лучше создать весь HTML для выбора в памяти и после того, как цикл добавит его в DOM. В противном случае вы вызовете оплату на каждой итерации, которая очень высока –

+1

Я обычно создавал новый элемент вне DOM, делал все изменения, которые мне нужны, а затем заменяю целевой элемент внутри DOM. Просто пытаюсь продемонстрировать концепцию OP, а не входить в особенности jQuery производительности :) – Eclecticist

+0

Это сработало спасибо – escada

0

Для каждого элемента в объекте, вы set choise1 и choise2 к этому значению. Поэтому во второй раз, когда он вызывает эту функцию $ .each, она переопределяет choise1 и choise2 с этим значением. Вы должны сделать следующее:

$("#getdata-button").click(function() { 
    $.getJSON('json_data.txt', function(read_data) { 
    $("choise1").val(read_data[0].option + read_data[0].percent); 
    $("choise2").val(read_data[1].option + read_data[1].percent); 
    }); 
}); 

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

Привет,

Макс

+0

Спасибо за ваш ответ, но это не сработало. Когда я нажимаю кнопку, ничего не происходит. – escada

0
$("#getdata-button").click(function() { 
    $.getJSON('json_data.txt', function(read_data) { 
     $("#choise1").html(read_data.result[0].option + read_data.result[0].percent); 
     $("#choise2").html(read_data.result[1].option + read_data.result[1].percent); 
    }); 
}); 

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

for(var i = 0; i < read_data.result.length; i++) { 
    //Access the json like this: 
    //read_data_result[i] 
} 
+0

read_data.result [2] .percent => read_data.result [1] .percent – Tommi

+0

ups, конечно, исправлено. Спасибо –

0

Лучшим решением было бы сделать что-то вроде этого:

<button id="getdata-button">hello</button> 
<div id="choices"></div> 

<script> 
$("#getdata-button").click(function() { 
    $.getJSON('data.txt', function(read_data) { 
    var choices = ''; 
    $.each(read_data.result, function(i, data) { 
     choices += '<div id="choise">' + data.option + data.percent + '</div><br>'; 
    }); 
    $("#choices").html(choices); 
    }); 
}); 
</script> 

поэтому сначала сгенерируйте HTML для всех вариантов в памяти, а затем добавьте его в DOM. Не добавляйте вещи в свой DOM в цикле, он будет запускаться, переполняя каждую медленную итерацию.

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