0
你好新手在這裏試圖找出我的jQuery代碼有什麼問題。該代碼應該從API中提取地震信息並將其顯示在DOM中。問題是我在DOM中看到重複的信息,但如果我使用控制檯調用來顯示該信息,那麼它們都是唯一的。當推送到DOM時JSON數據顯示重複
HTML:
<div class="control-wrapper">
<h2>Start date: <input type="text" id="datepicker"></h2>
<h2>End date: <input type="text" id="datepicker_2"></h2>
<button id="generate">Generate</button>
</div>
<h2>Total # of EQ's: <span id="total"></span></h2>
<div class="wrapper" id="template">
<h1>Name: <span id="title"></span></h1>
<h3>Magnitued: <span id="mag"></span></h3>
<h3>Tsunami Warning: <span id="tsunami"></span></h3>
</div>
的jQuery:
$(document).ready(function(){
var scriptString = 'https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=';
var button = $('#generate');
/**DATEPICKER**/
var startDate = 0;
var endDate = 0;
$('#datepicker').datepicker();
$('#datepicker').datepicker('option', 'dateFormat', 'yy-mm-dd');
$('#datepicker_2').datepicker();
$('#datepicker_2').datepicker('option', 'dateFormat', 'yy-mm-dd');
/** GENERATE BUTTON ON CLICK **/
button.on('click', function(){
startDate = $('#datepicker').val();
endDate = $('#datepicker_2').val();
scriptString = scriptString + startDate +'&endtime=' + endDate;
makeRequest(scriptString);
});
});
/** MAKEREQUEST EXECUTES AFTER THE GENERATE BUTTON IS CLICKED **/
function makeRequest(requestString){
var myRequest;
var eqs = [];
var myRequest = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
myRequest.onreadystatechange = function(){
if(myRequest.readyState === 4 && myRequest.status === 200){
var jsonObj = JSON.parse(myRequest.responseText);//Grabs json object
var data = jsonObj.features;
pushToDOM(data);
}
}
myRequest.open("GET", requestString, true);
myRequest.send();
}
/** RECIEVES ARRAY OF EQS AND PUSHES THE FIRST TO THE DOM **/
function pushToDOM(eqs){
var tot = $('#total');
tot.text(eqs.length);
/*ADDS EQs TO DOM*/
for(x in eqs){
var wrap = $('.wrapper').clone();
wrap.attr('id', x);
var place = eqs[x].properties.place;
var mag = eqs[x].properties.mag;
var tsu = eqs[x].properties.tsunami;
wrap.find('#title').text(place);
wrap.find('#mag').text(mag);
if(tsu === 0){
wrap.find('#tsunami').text('No');
}
else{
wrap.find('#tsunami').text('Yes');
}
$('body').delay().append(wrap);
if(x === 10){
break;
}
}
}
PS:我寫劇本的方式似乎是因爲它顯示信息,以便之前鎖定了瀏覽器是一個問題,如果有什麼方法來改進我的代碼結構或算法,請讓我知道。
謝謝!
非常感謝你抽出時間來寫這個答案的時間。看完你的代碼後,我肯定會經歷更多的jQuery教程。但是我的答覆中沒有看到答案,它告訴我究竟是什麼原因導致了這個問題,這是否是糟糕的代碼結構?感謝Tomalak! – Froy
究竟哪個問題?這個代碼是否仍然存在? – Tomalak
否您提供的代碼正常工作。我得到的輸出結果顯示了重複的地震信息,有時會以相同的信息顯示多達4次地震。你的例子顯示每個地震信息,沒有任何重複。 – Froy