2016-06-22 138 views
0

请帮助,我明白为什么ajax链接工作或单击时不工作? 它是通过时间jquery ajax链接工作/不工作它通过时间工作

window.onload = function(){ 
    function getXmlHttp(){ 
     ...... // simply ajax 
    } 
    var cont = document.getElementById('wrapper1'); 
    var As = document.getElementsByTagName("A"); // get links 
    for(var i = 0, l = As.length; i < l; i ++){ 
     As[i].onclick = function(href){ // code 
      As[i].addEventListener('click', false); // code 
      return function(e){ 
       e.preventDefault(); 
       var xmlhttp = getXmlHttp() 
       xmlhttp.open('GET', href, false); 
       xmlhttp.send(null); 
       if(xmlhttp.status == 200) {cont.innerHTML = xmlhttp.responseText;} 
      } 
     }(As[i].href); 

     As[i].href = "javascript: void 0"; // right code ? 
    } 
} 

回答

0

据我可以从你现有的代码告诉,你想一个单击处理程序绑定到所有锚元素,这将使一个Ajax请求的URL在href属性,并将结果显示在id="wrapper1"元素中。

你的代码是一个有点混乱,没有任何的缩进,但除非你正试图利用Ajax响应的它看起来主要是确定不等待onreadystatechange event - 你需要来包装if(xmlhttp.status)...线的处理程序如下:

var xmlhttp = getXmlHttp() 
xmlhttp.open('GET', href, false); 
xmlhttp.send(null); 
xmlhttp.onreadystatechange = function() { // <---- add this 
    if(xmlhttp.status == 200) {cont.innerHTML = xmlhttp.responseText;} 
}; 

而且,这条线:

As[i].addEventListener('click', false); 

...不正确,因为addEventListener()期望函数引用作为第二个参数,一当你已经通过.onclick = ...在元素上设置了点击处理程序时,根本没有任何意义。

给您所标记与jQuery你的问题,这里是一个另类的实现,是一个相当短一点:

$(document).ready(function() {   // when DOM is ready 
    var $cont = $("#wrapper1");   // save reference to output element 

    $("a").click(function(e) {    // bind click to all anchors 
    e.preventDefault();     // prevent default click behavior 
    $.get(this.href, function(result) { // Ajax get request to href URL 
     $cont.html(result);    // put result in output element 
    }); 
    }); 
}); 
+0

没怎么更新整个页面,只是一个街区? – Alexey

+0

该代码应该只更新#wrapper1元素。 – nnnnnn