ОК. Мне нужна помощь в этом. По какой-то причине onreadystatechange запускается несколько раз. Мне действительно нужно разобраться сегодня. Это последняя задача, которую я оставил, и я не знаю, что делать или что ее вызывает. Пожалуйста помоги.
Я использую AJAX (ndhr) для отправки JSON «Ymd h: i: s» в PHP для использования функции strtotime () для возврата «mdY» обратно через AJAX. JSON и PHP работают отлично, но когда onreadystatechange уволен, он делает это несколько раз. Почти как readyState == 4 раза, чем он.
var divs_d = ["d_2009", "d_2010", "d_2011"]; function ajax_get_json(cdiv,ocdv,ed){ var hr = new XMLHttpRequest(); hr.open("GET", "/json/sample.json", true); hr.setRequestHeader("Content-type", "application/json", true); hr.onreadystatechange = function () { if (hr.readyState == 4 && hr.status == 200) { cdiv.innerHTML = ""; var data = JSON.parse(hr.responseText); var cad = data.comm_archive; var rndate; var nda = new Array(); var ndac = 0; var ec = 0; for (ni = 0; ni < cad.length; ni++) { if (cad[ni].year == ocdv) { ec = ec + 1; ed.innerHTML = '<h4>' + ocdv + ' (' + ec + ' entries)</h4>'; var ndhr = new XMLHttpRequest(); var url = "/inc/strtotime.php"; var vars = "ndate=" + cad[ni].publish_date; ndhr.open("POST", url, true); ndhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); ndhr.onreadystatechange = function () { if (ndhr.readyState == 4 && ndhr.status == 200) { nda[ndac] = ndhr.responseText; ndac = ndac + 1; } } ndhr.send(vars); } } nda.sort(function (a, b) { return b - a }); for (ndai = 0; ndai < ndac; ndai++) { cdiv.innerHTML += '<h4><a href="/this_is_a_Test/archive.php?cdate=' + nda[ndai] + '">' + nda[ndai] + '</a></h4>'; } } } hr.send(null); } function optionCchange() { var ocdv = document.getElementById("optionCdate").value; var ed = document.getElementById("ediv"); for (i = 0; i < divs_d.length; i++) { var cdiv = document.getElementById(divs_d[i]); if (divs_d[i] == "d_" + ocdv) { cdiv.className = "bddiv show"; ajax_get_json(cdiv,ocdv,ed); } else { cdiv.className = "bddiv hide"; } } }