AJAX函数参数是否为空?

时间:2011-10-05 09:04:30

标签: javascript html ajax frontend

我遇到了JS的问题:

在第1行到第4行,我从DOM获取所有“a”元素并获取它们的href。 后来我想通过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 个答案:

答案 0 :(得分: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