Ajax Div切换避免重新加载内容

时间:2013-06-06 15:18:29

标签: javascript jquery ajax

我有一个关于将Ajax加载到DIV中的问题。理想情况下我想要的是:

使用关闭按钮切换div,我在这里有代码:http://jsfiddle.net/tymeJV/uhEgG/28/

$(document).ready(function () {
    $('#country').click(function () {
        $("#country_slide").slideToggle(function() {
            if ($(this).is(":visible")) {
                alert("im visible!");
            }
        });
    });

    $('#close').click(function (e) {
        e.preventDefault();
        $('#country_slide').slideToggle();
    });

});

然后我想要一些AJAX代码在扩展div时将一个html文件加载到div中。诀窍是,如果HTML成功加载,我希望它避免重新加载HTML文件,如果div已关闭并重新启动,因为我已经加载它,只需使用按钮切换内容。我为此提供的代码(我从这里得到了帮助就是这个):

http://jsfiddle.net/spadez/uhEgG/55/

$(function () {
    $('#country_link').on('click', function (e) {
        // Prevent from following the link, if there is some sort of error in
        // the code before 'return false' it would still follow the link.
        e.preventDefault();

        // Get $link because 'this' is something else in the ajax request.
        var $link = $(this);
        // Exit if the data is loaded already
        if ($link.data('loaded') === true)
            return false;

        $.ajax({
            type: 'GET',
            dataType: 'html',
            url: '/ajax/test.html',
            timeout: 5000,
            beforeSend: function () {
            },
            success: function (data, textStatus) {
                $("#country_slide").html(data);
                alert('request successful');
                // If successful, bind 'loaded' in the data
                $link.data('loaded', true)
            },
            error: function (xhr, textStatus, errorThrown) {
                $("#country_slide").html('Error');
            },
            complete: function () {
            },
        });
    });
});
但是,我还没有能够使用它。所以我的问题是,它实际上是否可以这样做,如果是这样的话,任何对jquery有更多经验的人都可以帮我将div切换与ajax加载脚本集成。

这是我的第一个jquery脚本之一,我在使用它时遇到了一些困难,也许它不适合初学者。谢谢。

1 个答案:

答案 0 :(得分:1)

我修改了您发布的fiddle,并在适当的时候将呼叫添加到slideToogle()。还添加了div元素来保存加载的html代码。

<div id="country_slide">
    <a href="#" id="close">Close</a>
    <div class=".content"></div> <!-- This is the div I added -->
</div>

您可以在控制台中检查日志消息,以验证代码是否按预期执行。您正在执行的Ajax调用的URL始终返回错误,因此我更改为jsfiddle为测试提供的URL:/echo/html/

这是修改后的JS代码:

$(function () {
    $('#close').click(function (e) {
        e.preventDefault();
        $('#country_slide').slideToggle();
    });

    $('#country_link').on('click', function (e) {
        e.preventDefault();
        var $link = $(this);
        // Exit if the data is loaded already
        if ($link.data('loaded') === true) {
            console.log('Not using Ajax.');
            $("#country_slide").slideToggle();
            return false;
        }

        $.ajax({
            type: 'GET',
            dataType: 'html',
            url: '/echo/html/',
            timeout: 5000,
            beforeSend: function () {
                $("#country_slide .content").html('<p>Loading</p>')
            },
            success: function (data, textStatus) {
                console.log('Fecthed with Ajax.');
                $("#country_slide .content").html(data);
                $("#country_slide").slideToggle();
                // If successful, bind 'loaded' in the data
                $link.data('loaded', true)
            },
            error: function (xhr, textStatus, errorThrown) {
                alert('request failed');
            },
            complete: function () {
            },
        });
    });
});