2013-04-08 2 views
0

В настоящее время у меня есть несколько вопросов в json.file, как я могу получить все эти вопросы из json.file по порядку RANDOM, когда нажимают кнопку 'refresh'? до сих пор я извлекал их для цикла, поэтому он отображает все вопросы в порядке последовательности.Как получить случайные вопросы из json-файла?

<script> 
      var jsonfile='data.json'; 
      var qData=new Array(); 

    $.getJSON(jsonfile, function(data){ 
    for (var i=0;i<data.activity.length;i++) 
     { 
      qData[i]=data.activity[i].question; 
     } 

    for(var i=0;i<qData.length;i++) 
     { 
      append(qData[i],i); 
      $('#text'+(i+1)).textinput(); 
       $('#submit'+(i+1)).button(); 
      $('#cancel'+(i+1)).button(); 
     } 

    function append(data,i) 
     { 
      $('#list').append('<li><a href=#mypanel'+(i+1)+' data-icon="arrow-l" data-iconpos="notext" data-shadow="false" data-iconshadow="false" class="ui-icon-nodisc" id="list">'+ data + '</a></li>'); //list item 
      $('#mypanel'+(i+1)).append("<div align='center' style='margin-top:30px;'><font style='font-family:Helvetica, Arial, sans-serif ;color:white;' size='5px' ><b>Question Hint : </b></font></div><br/><label for=text"+(i+1)+" id=paneltitle"+(i+1)+" style='margin-top:10px;text-align:center;color:white;'>"+data+"</label>");//panel item 
     $('#paneltitle'+(i+1)).append('<input type="text" id=text'+(i+1)+' >'); 
      $('#mypanel'+(i+1)).append('<a href="#header" data-role="button" id=submit'+(i+1)+' data-inline="true" data-rel="close" data-icon="check" style="margin-left:75px;">Submit</a>'); 
      $('#mypanel'+(i+1)).append('<a href=#mypanel'+(i+1)+' data-role="button" id=cancel'+(i+1)+' data-inline="true" data-rel="close" data-icon="delete2" style="margin-left:75px;">Cancel</a>'); 

     } 
      $('#list').listview('refresh'); 



     }); 
     </script> 

     <div data-theme="a" data-role="footer" data-position="fixed"> 
      <div data-role="navbar"> 
      <ul> 
       <li><a id="PageRefresh" data-icon="refresh">Refresh</a></li> 
      </ul> 
      </div> 
     </div> 
+2

Возможный дубликат http://stackoverflow.com/questions/6274339/how-can-i -shuffle-a-array-in-javascript – Aiias

ответ

0

Попробуйте

while (data.activity.length) { 
    var index = Math.floor(Math.random() * data.activity.length); 
    qData.push(data.activity[index]); 
    data.activity.splice(index, 1) 
} 

Полный код

var jsonfile = 'data.json'; 
var qData = []; 

$.getJSON(jsonfile, function(data) { 

    while (data.activity.length) { 
     var index = Math.floor(Math.random() * data.activity.length); 
     qData.push(data.activity[index]); 
     data.activity.splice(index, 1) 
    } 

    for (var i = 0; i < qData.length; i++) { 
     append(qData[i], i); 
     $('#text' + (i + 1)).textinput(); 
     $('#submit' + (i + 1)).button(); 
     $('#cancel' + (i + 1)).button(); 
    } 

    function append(data, i) { 
     $('#list') 
       .append('<li><a href=#mypanel' 
         + (i + 1) 
         + ' data-icon="arrow-l" data-iconpos="notext" data-shadow="false" data-iconshadow="false" class="ui-icon-nodisc" id="list">' 
         + data + '</a></li>'); // list item 
     $('#mypanel' + (i + 1)) 
       .append("<div align='center' style='margin-top:30px;'><font style='font-family:Helvetica, Arial, sans-serif ;color:white;' size='5px' ><b>Question Hint : </b></font></div><br/><label for=text" 
         + (i + 1) 
         + " id=paneltitle" 
         + (i + 1) 
         + " style='margin-top:10px;text-align:center;color:white;'>" 
         + data + "</label>");// panel item 
     $('#paneltitle' + (i + 1)).append('<input type="text" id=text' 
       + (i + 1) + ' >'); 
     $('#mypanel' + (i + 1)) 
       .append('<a href="#header" data-role="button" id=submit' 
         + (i + 1) 
         + ' data-inline="true" data-rel="close" data-icon="check" style="margin-left:75px;">Submit</a>'); 
     $('#mypanel' + (i + 1)) 
       .append('<a href=#mypanel' 
         + (i + 1) 
         + ' data-role="button" id=cancel' 
         + (i + 1) 
         + ' data-inline="true" data-rel="close" data-icon="delete2" style="margin-left:75px;">Cancel</a>'); 

    } 
    $('#list').listview('refresh'); 

}); 

Демо: Fiddle

+0

Спасибо большое Арун .. проблема решена. –

0

Вам необходимо рандомизировать его самостоятельно, получить общие ключи в объекте и выбрать его.

$.getJSON(jsonfile, function(data) { 
    var max = data.activity.length; 
    var min = 0; 
    var random = Math.floor(Math.random() * (max - min + 1)) + min; 

    console.log(data.activity[random]); 
}); 
Смежные вопросы