Ajax不会发布到div

时间:2012-05-31 20:50:43

标签: javascript jquery ajax

我从jshint或控制台没有收到此代码的错误。然而,我的ajax内容并未发布到预期的div。但是,警报会触发:

    var recentVar;
    var highlightsVar;
    var test3;
    var test4;

function switcher(divToShow, thisVar, otherVar, url, div){
    $("#site-nav li a").parents().removeClass("nav-active");
        $(div).addClass("nav-active");
        if (otherVar){ $(otherVar).detach();}

        if(typeof thisVar === 'undefined') {
            thisVar = $(divToShow + " ul.top-level").load("assets/includes/" + url, function () {
                alert("I'm new");
            });
        } else {
            $(thisVar).appendTo("#content-listing");
            alert("I'm old");
        }
}

    //Recent
    $("#site-nav .nav1").on("click", function (event) {
    switcher("#recent", "recentVar", "highlightsVar", "recent.php", "#site-nav .nav1");
    event.preventDefault();
    });

    //Highlights
    $("#site-nav .nav2").on("click", function (event) {
    switcher("#highlights", "highlightsVar", "recentVar", "all-web.php", "#site-nav .nav2");
    event.preventDefault();
    });

5 个答案:

答案 0 :(得分:4)

执行切换器后,thisVar将始终为字符串。它永远不会有未定义的类型。它也看起来像你想要传入一个对象(由于声明的变量)但是...如上所述,你总是传入一个字符串。

[根据James Montagne的评论]

答案 1 :(得分:3)

它与AJAX无关,但我认为你的问题就在这里。

$(thisVar)

thisVar只是文字。如果您检查,您会看到$(thisVar).length为0.这是因为您正在调用:$("recentVar"),它将搜索<recentVar></recentVar>类型的任何元素,这些元素显然没有。如果您的意图是附加该文本,则可以使用append或创建元素并将文本设置为recentVar并附加该文本。

编辑:另一个问题:

$(divToShow + "ul.top-level")

你需要一个空间:

$(divToShow + " ul.top-level")

否则你试图匹配#recentul.top-level,这是无意义的。


答案 2 :(得分:0)

试试这个:

if(typeof thisVar === 'undefined') {
        thisVar = $(divToShow + " ul.top-level").load("assets/includes/" + url, function () {
            alert("I'm new");
        });
    } else {
        $(thisVar).appendTo($("#content-listing"));
        alert("I'm old");
    }

答案 3 :(得分:0)

AMAIK,jQuery&#39; load()方法直接将结果插入到调用对象中。因此,结果应该加载到$(divToShow + " ul.top-level")元素中。你检查过了吗?

答案 4 :(得分:0)

如果当前文档不包含ID为divToShow + " ul.top-level"的元素,则不会执行.load()方法。

尝试使用Firebug或类似的东西来跟踪请求。也许你的回答出了问题。