2011-08-04 210 views
0

我正在爲客戶端的網站工作,我正在使用ajax來獲取文件的內容,特別是html,然後我試圖將該html插入到div中,以便我可以顯示內容。我知道我正在獲取文件的內容,因爲我的警報設置爲顯示請求的readyState,status和responseText,並且它顯示了警報中文件的內容。然而,當我attmept插入到使用此行的div:document.getElementsByClassName('content').innerHTML = response;沒有任何反應。任何人都可以幫我解決這個問題嗎?javascript not setting innerHTML

CODE:

JAVASCRIPT:

<script language="javascript" type="text/javascript"> 
var request = new ajaxRequest(); 
var fileLoc; 
var response; 
function getData(fileName){ 
    fileLoc = encodeURI("assets/"+fileName+".html") 
    alert(fileLoc); 
    request.onreadystatechange = processData; 
    request.open("GET",fileLoc, false); 
    request.send(); 
    alert(request.readyState); 
    alert(response); 
    alert(request.status); 
    document.getElementsByClassName('content').innerHTML = response; 

} 
function processData(){ 
    response = request.responseText; 
    /*if (request.readyState==4){ 
     if (request.status==200){ 
      try{ 
       document.getElementsByClassName('content').innerHTML = response; 
      } catch(e){ 
       alert("Error: " +e.description); 
      } 
     } 
     else{ 
      alert("An error has occured making the request"); 
     } 
    }*/ 
} 
function home() { 
    getData("home"); 
} 
function about() { 
    getData('about'); 
} 
function proof() { 
    getData('contact'); 
} 
function contact() { 
    getData('proof'); 
} 
function ajaxRequest(){ 
    var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] 
    if (window.XMLHttpRequest) 
     return new XMLHttpRequest(); 
    else if (window.ActiveXObject){ 
     for (var i=0; i<activexmodes.length; i++){ 
      try{ 
       return new ActiveXObject(activexmodes[i]); 
      } 
      catch(e){ 
       alert(e.description); 
      } 
     } 
    } 
    else 
     return false 
} 

HTML:

<body> 
<div class="container"> 
    <div class="logo"> <span id="link-home" class="noglow" onclick="javascript: home();" onmouseover="this.className='glow'" onmouseout="this.className='noglow'">Home</span><!-- end link-home --> 
     <span id="link-about"class="noglow" onclick="javascript: about();" onmouseover="this.className='glow'" onmouseout="this.className='noglow'">About</span><!-- end link-about --> 
     <span id="link-proof" class="noglow" onclick="javascript: proof();" onmouseover="this.className='glow'" onmouseout="this.className='noglow'">Proof of Concept</span><!-- end link-proof --> 
     <span id="link-contact" class="noglow" onclick="javascript: contact();" onmouseover="this.className='glow'" onmouseout="this.className='noglow'">Contact</span><!-- end link-contact --> 

     <div id="home-flower" onclick="javascript: home();" onmouseover="javascript: document.getElementById('link-home').className='glow'" onmouseout="javascript: document.getElementById('link-home').className='noglow'"></div><!-- end home-flower --> 
     <div id="about-flower" onclick="javascript: about();" onmouseover="javascript: document.getElementById('link-about').className='glow'" onmouseout="javascript: document.getElementById('link-about').className='noglow'"></div><!-- end about-flower --> 
     <div id="proof-flower" onclick="javascript: proof();" onmouseover="javascript: document.getElementById('link-proof').className='glow'" onmouseout="javascript: document.getElementById('link-proof').className='noglow'"></div><!-- end proof-flower --> 
     <div id="contact-flower" onclick="javascript: contact();" onmouseover="javascript: document.getElementById('link-contact').className='glow'" onmouseout="javascript: document.getElementById('link-contact').className='noglow'"></div><!-- end other-flower --> 
    </div><!-- end logo--> 
    <div class="content"></div><!-- end content --> 
</div><!-- end container --> 
<div class="footer"></div><!-- end footer --> 

CSS:

@charset "UTF-8"; 
/* CSS Document */ 

* { 
    margin:auto; 
} 

html, body { 
    height: 100%; 
} 

.container { 
    position:relative; 
    min-height: 100%; 
    width:800px; 
} 

.logo{ 
    position:relative; 
    width:100%; 
    height:210px; 
    top:0px; 
    left:0px; 
    background:url(images/logo.png); 
} 

.content { 
    position:relative; 
    top:0px; 
    left:0px; 
    padding-top:20px; 
    padding-bottom: 75px !important; 
} 

.footer { 
    position:relative; 
    height: 75px; 
    margin-top:-75px; 
    background-color:#06F; 
    bottom:0px; 
    left:0px; 
} 

.large{ 
    font-size:36px; 
} 

.fltright { 
    position:relative; 
    float:right; 
    top:0px; 
    left:0px; 
    width:auto; 
    height:auto; 
} 

.fltleft { 
    position:relative; 
    float:left; 
    top:0px; 
    left:0px; 
    width:auto; 
    height:auto; 
} 

span.glow { 
    text-shadow: 0px 0px 10px #87CFBF, 0px 0px 10px #87CFBF, 0px 0px 10px #87CFBF; 
    color:#999; 
    text-align:center; 
} 

span.noglow { 
    color:#999; 
    text-align:center; 
} 

#home{ 
    position:absolute; 
    width:100%; 
    height:100%; 
    top:0px; 
    left:0px; 
    visibility:visible; 
    line-height:20px; 
} 

#about{ 
    position:absolute; 
    width:100%; 
    height:100%; 
    top:0px; 
    left:0px; 
    visibility:visible; 
} 

#proof{ 
    position:absolute; 
    width:100%; 
    height:100%; 
    top:0px; 
    left:0px; 
    visibility:visible; 
} 

#contact{ 
    position:absolute; 
    width:100%; 
    height:100%; 
    top:0px; 
    left:0px; 
    visibility:visible; 
} 

#link-home{ 
    position:absolute; 
    width:75px; 
    height:30px; 
    top:110px; 
    left:419px; 
} 

#link-about{ 
    position:absolute; 
    width:75px; 
    height:30px; 
    top:110px; 
    left:515px; 
} 

#link-proof{ 
    position:absolute; 
    width:75px; 
    height:30px; 
    top:100px; 
    left:609px; 
} 

#link-contact{ 
    position:absolute; 
    width:75px; 
    height:30px; 
    top:110px; 
    left:708px; 
} 


#home-flower{ 
    position:absolute; 
    width:30px; 
    height:30px; 
    top:131px; 
    left:442px; 
    background:url(images/home-flower.png); 
} 

#about-flower{ 
    position:absolute; 
    width:30px; 
    height:30px; 
    top:135px; 
    left:540px; 
    background:url(images/about-flower.png); 
} 

#proof-flower{ 
    position:absolute; 
    width:30px; 
    height:30px; 
    top:131px; 
    left:635px; 
    background:url(images/proof-flower.png); 
} 

#contact-flower{ 
    position:absolute; 
    width:30px; 
    height:30px; 
    top:135px; 
    left:733px; 
    background:url(images/contact-flower.png); 
} 
+0

你應該真的縮小你的代碼粘貼和孤立的具體問題。這只是太多的代碼。另外,爲什麼你不使用jQuery庫? –

+0

對不起,我只是想確保我沒有錯過任何事情。至於jquery,我從來沒有用過它。我有什麼好處?你知道它有什麼好的起點嗎? – Joe

回答

3

document.getElementByClassName正在返回的數組。你不能設置你需要循環訪問數組的innerHtml,並設置每個元素內部的html;

工作例如:http://jsfiddle.net/CYZUL/

function processData(){ 
    response = request.responseText; 
    /*if (request.readyState==4){ 
     if (request.status==200){ 
      try{ 
       var elements = document.getElementsByClassName('content'); 
       for(var x=0; x < elements.length; x++) 
       { 
       elements[x].innerHTML = response; 
       } 
      } catch(e){ 
       alert("Error: " +e.description); 
      } 
     } 
     else{ 
      alert("An error has occured making the request"); 
     } 
    }*/ 
} 

function getData(fileName){ 
    fileLoc = encodeURI("assets/"+fileName+".html") 
    alert(fileLoc); 
    request.onreadystatechange = processData; 
    request.open("GET",fileLoc, false); 
    request.send(); 
    alert(request.readyState); 
    alert(response); 
    alert(request.status); 
    var elements = document.getElementsByClassName('content'); 
    for(var x=0; x < elements.length; x++) 
    { 
     elements[x].innerHTML = response; 
    } 
} 
+0

或者給元素一個id並使用'document.getElementById()'。 – nnnnnn

+0

@nnnnn是真的,但這取決於他試圖實現的目標 –

+0

+1。謝謝我沒有意識到document.getElementsByClassName返回一個數組。雖然我應該'的',大聲笑 – Joe

1

爲什麼不使用jQuery的$ .load();功能,並節省您的自己很多的痛苦和時間