2011-10-05 84 views
0

我得到了JS的問題:AJAX函數參數爲空?

在第1至第4行,我從DOM獲取所有「a」元素並獲得它們的hrefs。 以後我想通過AJAX重新加載URL,但是href無法正確到達......什麼錯誤?

$(document).ready(function(){ 
    $('a').click(function(e){ 
     ajaxReload($(this).attr('href')); 
     e.preventDefault(); 
    }); 
}); 

function ajaxReload(href) { 

var xmlhttp = null; 

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

    xmlhttp.open("GET", href, true); 
    xmlhttp.onreadystatechange = function() { 

     if(xmlhttp.readyState != 4) { 
      document.write('loading'); 
     } 
     if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      alert('hello'); 
      //alert('getting '+xmlhttp.status+' for '+href); 


      var pureHTML = xmlhttp.responseText; 
      var ajaxstart = pureHTML.indexOf('<!-- AJAX START -->'); 
      var ajaxend = pureHTML.indexOf('<!-- AJAX END -->'); 
      var ajaxContent = pureHTML.substring(ajaxstart, ajaxend); 

      var writeContent = document.getElementById('content'); 
      writeContent.innerHTML = ajaxContent; 

     } 
    } 
    xmlhttp.send(null); 
} 
+1

你是什麼意思的href不能正確到達? – Timbo

+0

在底部,函數從var'href'中引用的文件獲取HTML代碼,但是如果我在alert中輸出它'href',則返回null .. – user980018

+0

您有jQuery可用。有沒有**任何**理由你爲什麼不使用jQuery提供的AJAX函數?!如果你需要明文響應,你可以使用'dataType:'text''。 – ThiefMaster

回答

0

對不起,如果我誤解了你的代碼。我認爲,你只需要(至少近似)只是刪除代碼註釋如下:

//$('a').click = function(href) { 

    var pureHTML = xmlhttp.responseText; 
    var ajaxstart = pureHTML.indexOf('<!-- AJAX START -->'); 
    var ajaxend = pureHTML.indexOf('<!-- AJAX END -->'); 
    var ajaxContent = pureHTML.substring(ajaxstart, ajaxend); 

    $("content").html(ajaxContent); 

// ajaxReload(href); //this would cause a loop? 

// return false; 
//} 

要回答你後面的問題 - 你可以改變你的事件傳播搬運到:

$(document).ready(function(){ 
    $('a').click(function(e){ 
     ajaxReload($(this).attr('href')); 
     e.preventDefault(); 
    }); 
}); 

而對於進一步的評論,也許嘗試改變你:

document.write('loading'); 

要:

$("content").html(xmlhttp.status); //so now you can see the loading status for testing 
+1

aaand它的工作原理!謝謝:-) – user980018

+0

...不!我必須把我的回報置於何處? 我把它放在最上面,所以DOM中的鏈接不會被執行,但腳本會停止。 – user980018

+0

你可以把event.preventDefault();在你調用ajaxReload的地方旁邊的點擊函數中。或者在相同的地方返回false。 – Timbo