2016-06-22 137 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