Хорошо, у вас есть несколько глобалов, которые вам не нужны. Основное правило: если вам не нужен доступ к переменной вне функции, поместите var
перед ней. В противном случае вы повсеместно будете забивать данные:
// changed the name to `d` because div seems to already be a global var.
function getLinks(url, d) {
// make xhr a local variable so it won't get re-written.
var request = new XMLHttpRequest();
request.open('POST', 'ebook_catg.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
url = encodeURIComponent(url)
var post = "url=" + url;
request.onreadystatechange = function () {
// when the request was global, this would be false until the last
// request completed
if (request.readyState == 4) {
// since d only exists as a parameter to getLinks, this should
// already be bound when the onreadystatechange is created.
d.innerHTML = request.responseText;
d.style.display = "block";
}
}
request.send(post);
}
Итак, почему я просто делал такие странные, странные вещи? Что ж, похоже, что div был назначен как глобальная переменная, и хотя JS должен всегда искать имя параметра функции для привязки, мы хотим устранить все возможные проблемы. Поэтому я изменил имя этой переменной. Затем я установил xhr для отображения локальной переменной с ключевым словом var. Я также изменил имя на запрос. Еще раз, это не должно иметь значения - переменная означает, что переменная будет привязана к этой области, но изменение безвредно, и, поскольку я не знаю, что еще у вас есть, я решил устранить двусмысленности. Если это не поможет JS, это поможет читателю.
Примечание:
Важной частью вышеприведенного ответа является var перед запросом.