2014-03-01 35 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;'否? :) –