JavaScript를 처음 사용하고 있습니다. 나는 아래에 링크 된 웹 페이지를 만들어서 내가하는 수업을위한 운동으로 만들었다.매번로드되는 이미지 및 버튼
는이 제대로 경우 모든 부하 확인을 작동하는 것 같다,하지만, 시간을 반으로 이미지 또는 버튼 중 하나를로드하지 않으며, 때로는 미리로드되지만 전체 크기 (마우스 오버) 이미지가로드되지 않습니다 . Firefox 나 IE에서는 첫 번째로드에서만 발생하는 것으로 보이고 그 이후 (브라우저가 열려있는 한) 이후에는 항상로드됩니다. 그러나 크롬에서는 매 페이지마다 새로 고침을 반복합니다. 페이지를 10 번 연속으로 새로 고치면 버튼이나 이미지 (또는 둘 다)가로드되지 않는 몇 가지 인스턴스가 표시됩니다.
나는이 서버에 다른 문제가 없었기 때문에 내 코드에 문제가 있다고 가정합니다. 어떤 아이디어?
감사합니다.
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<style type = "text/css">
.box { border: 1px solid black; padding: 4px }
</style>
<title>Product Catalog</title>
<script>
var catalogDiv;
var summaryRequest;
var descriptionsRequest;
var thumbsRequest;
var imagesRequest;
function showLargeImage(imageElement)
{
imageElement.style.display = "none";
imageElement.nextSibling.style.display = "inline";
}
function showThumb(imageElement)
{
imageElement.style.display = "none";
imageElement.previousSibling.style.display = "inline";
}
function showDesc(descButton)
{
if (descButton.nextSibling.style.display == "none") {
descButton.nextSibling.style.display = "block";
} else {
descButton.nextSibling.style.display = "none";
}
}
function getDescriptions()
{
try
{
descriptionsRequest = new XMLHttpRequest();
descriptionsRequest.addEventListener("readystatechange",
loadDescriptions, false);
descriptionsRequest.open("GET", "descriptions.json", true);
descriptionsRequest.setRequestHeader("Accept",
"application/json; charset=utf-8");
descriptionsRequest.send();
}
catch (exception)
{
alert("Request Failed");
}
}
function loadDescriptions()
{
if (descriptionsRequest.readyState == 4
&& descriptionsRequest.status == 200)
{
var descriptions = JSON.parse(descriptionsRequest.responseText);
for (var i = 0; i < descriptions.length; i++) {
var infoDiv = document.getElementById(descriptions[i].id +
"-info-inner");
var descButton = document.createElement("button");
infoDiv.appendChild(descButton);
descButton.type = "button";
descButton.textContent = "show description";
descButton.setAttribute("onclick", "showDesc(this)");
var desc = document.createElement("fieldset");
desc.style.display = "none";
desc.style.margin = "10px";
infoDiv.appendChild(desc);
desc.innerHTML = "<br>" + descriptions[i].text + "<br><br>" ;
}
}
}
function getImages()
{
try
{
imagesRequest = new XMLHttpRequest();
imagesRequest.addEventListener("readystatechange",
loadImages, false);
imagesRequest.open("GET", "images.json", true);
imagesRequest.setRequestHeader("Accept",
"application/json; charset=utf-8");
imagesRequest.send();
}
catch (exception)
{
alert("Request Failed");
}
}
function loadImages()
{
if (imagesRequest.readyState == 4 && imagesRequest.status == 200)
{
var images = JSON.parse(imagesRequest.responseText);
for (var i = 0; i < images.length; i++) {
var imageDiv = document.getElementById(images[i].id +
"-image-inner");
imageDiv.innerHTML += "<img style=\"display:none;\"" +
"src=\"" + images[i].filename+ "\">";
imageDiv.lastChild.setAttribute("onmouseout",
"showThumb(this)");
}
}
}
function getThumbs()
{
try
{
thumbsRequest = new XMLHttpRequest();
thumbsRequest.addEventListener("readystatechange",
loadThumbs, false);
thumbsRequest.open("GET", "thumbs.json", true);
thumbsRequest.setRequestHeader("Accept",
"application/json; charset=utf-8");
thumbsRequest.send();
}
catch (exception)
{
alert("Request Failed");
}
}
function loadThumbs()
{
if (thumbsRequest.readyState == 4 && thumbsRequest.status == 200)
{
var thumbs = JSON.parse(thumbsRequest.responseText);
for (var i = 0; i < thumbs.length; i++) {
var imageDiv = document.getElementById(thumbs[i].id +
"-image-inner");
imageDiv.innerHTML = "<img style=\"display:inline;\"" +
"src=\"" + thumbs[i].filename+ "\">";
imageDiv.firstChild.setAttribute("onmouseover",
"showLargeImage(this)");
}
}
}
function setupDivsRequest()
{
try
{
summaryRequest = new XMLHttpRequest();
summaryRequest.addEventListener("readystatechange",
setupDivsResponse, false);
summaryRequest.open("GET", "summary.json", true);
summaryRequest.setRequestHeader("Accept",
"application/json; charset=utf-8");
summaryRequest.send();
}
catch (exception)
{
alert("Request Failed");
}
}
function setupDivsResponse()
{
if (summaryRequest.readyState == 4 && summaryRequest.status == 200)
{
var summary = JSON.parse(summaryRequest.responseText);
for (var i = 0; i < summary.length; i++) {
var productDiv = document.createElement("div");
var productImageOuterDiv = document.createElement("div");
var productImageInnerDiv = document.createElement("div");
var productInfoOuterDiv = document.createElement("div");
var productInfoInnerDiv = document.createElement("div");
catalogDiv.appendChild(productDiv);
productDiv.appendChild(productImageOuterDiv);
productDiv.appendChild(productInfoOuterDiv);
productImageOuterDiv.appendChild(productImageInnerDiv);
productInfoOuterDiv.appendChild(productInfoInnerDiv);
productDiv.id = summary[i].id;
productDiv.className = "box";
productImageOuterDiv.id = summary[i].id + "-image-outer";
productImageOuterDiv.style.cssFloat = "left";
productImageInnerDiv.id = summary[i].id + "-image-inner";
productImageInnerDiv.style.height = "250px";
productImageInnerDiv.style.width = "250px";
productImageInnerDiv.style.display = "table-cell";
productImageInnerDiv.style.verticalAlign = "middle";
productImageInnerDiv.style.textAlign = "center";
productInfoOuterDiv.id = summary[i].id + "-info-outer";
productInfoOuterDiv.style.height = "250px";
productInfoInnerDiv.id = summary[i].id + "-info-inner";
productInfoInnerDiv.style.float = "left";
productInfoInnerDiv.style.padding = "10px";
productInfoInnerDiv.innerHTML = summary[i].title + "<br>";
productInfoInnerDiv.innerHTML += summary[i].price + "<br><br>";
}
}
}
function start()
{
catalogDiv = document.getElementById("catalog");
setupDivsRequest();
getThumbs();
getImages();
getDescriptions();
}
window.addEventListener("load", start, false);
</script>
</head>
<body>
<h1>Mouse over a product thumbnail for a larger picture.</h1>
<div id = "catalog"></div>
</body>
</html>
Atleast는 무슨 일이 벌어지는 지 알 수있는 충분한 코드를 게시했습니다. – adeneo
ff10 및 캐시가 비활성화되어이 동작을 재현 할 수 없습니다. 모든 요청에 대해 작동합니다. – Corubba
@corubba 확인해 주셔서 감사합니다. 어떤 이유로 든 문제는 Chrome에만 나타나는 것 같습니다. 그러나 아래에 나와있는 대답에서 설명 하듯이, 결국 이것이 내 대본의 경쟁 조건의 결과라는 것을 깨달았습니다. – The111