2014-03-01 37 views
0

我有兩個單獨的鏈接,調用相同的功能。它們用於將不同的外部html文檔加載到主體的主體中。他們自己正確地工作。但是當一個文檔被加載時另一個拒絕。什麼是問題傢伙?爲什麼JavaScript拒絕多次使用?

<li> 
    <a href="#" class="decorNavi" onclick ="xmlRequest('about')" >ABOUT</a> 
</li> 
<li> 
    <a href="#" class="decorNavi" onclick ="xmlRequest('contactus')" >CONTACT US</a 
</li> 

腳本:

function xmlRequest(target) { 

    var targetClick; 

    targetClick = target; 

    if (window.XMLHttpRequest) { 

     xmlRequest = new XMLHttpRequest(); 
    } else { 
     xmlRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlRequest.open("GET", targetClick + ".html?=" + Math.random(), true); 


    xmlRequest.onreadystatechange = function() { 

     if (xmlRequest.readyState == 4 && xmlRequest.status == 200) { 

      document.getElementById("midContainer").innerHTML = xmlRequest.responseText; 
     } 
    } 

    xmlRequest.send(); 
} 
+0

這是否仍然存在,如果你'變種xmlRequest;'? –

+0

嘗試調試您的'xmlRequest.status'它可能是其他如果從緩存中 – Hardy

+0

您是否在JavaScript控制檯中收到任何錯誤? –

回答

5

你重寫你的函數內部函數聲明:

function xmlRequest(target) { 

xmlRequest = new XMLHttpRequest(); 

它觸發一次,然後替換函數與xmlRequest。把第二個命名爲別的東西。

+0

JavaScript中沒有重載的東西嗎? –

+0

@Amal.A記住_JavaScript_不是強類型語言;如果存在重載這樣的事情,解釋者將無法知道如何決定你想要的。 –

+0

保羅S是對的。你有沒有在JS函數中看過這種東西?:if(!param){param = 0; } –

1

你的函數「xmlRequest」的名字和它定義的對象是一樣的。把它改成別的東西。

2

正如Mike Robinson所說,你正在覆蓋你的功能。爲您的功能使用其他名稱。這很簡單。

function xmlRequest(targetClick) { 

    var xmlRequest; // xmlRequest is no more a global. 

    if (window.XMLHttpRequest) { 
     xmlRequest = new XMLHttpRequest(); 
    } else { 
     xmlRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlRequest.open("GET", targetClick + ".html?=" + Math.random(), true); 

    xmlRequest.onreadystatechange = function() { 
     if (xmlRequest.readyState == 4 && xmlRequest.status == 200) { 
      document.getElementById("midContainer").innerHTML = xmlRequest.responseText; 
     } 
    } 

    xmlRequest.send(); 
} 

JSbin:http://jsbin.com/kehaxexo/2/

+0

這仍然會產生全局變量 –

+0

你說得對,只需要添加'var xmlRequest;'否? :) –