向此脚本添加AJAX回调函数

时间:2012-08-22 17:30:35

标签: ajax

如何在此脚本中添加AJAX回调函数?

此脚本使用AJAX加载内容而不刷新页面页面,但它不加载脚本。我想如果我添加一个回调函数,脚本就会加载。

$(document).ready(function () {

    var hash = window.location.hash.substr(1);
    var href = $('#nav li a').each(function () {
        var href = $(this).attr('href');
        if (hash == href.substr(0, href.length - 5)) {
            var toLoad = hash + '.php #conten';
            $('#conten').load(toLoad)
        }
    });

    $('#nav li a').click(function () {

        var toLoad = $(this).attr('href') + ' #conten';
        $('#conten').hide('fast', loadContent);
        $('#load').remove();
        $('#conten').append('<span id="load"></span>');
        $('#load').fadeIn('normal');
        window.location.hash = $(this).attr('href').substr(0, $(this).attr('href').length - 5);

        function loadContent() {
            $('#conten').load(toLoad, '', showNewContent)
        }

        function showNewContent() {
            $('#conten').show('normal', hideLoader());
        }

        function hideLoader() {
            $('#load').fadeOut('normal');
        }

        return false;
    });
});

2 个答案:

答案 0 :(得分:0)

如果我理解正确,核心问题是load()不起作用。这可能是因为您的网址有一个哈希标记,前面有一个空格:“url #conten”。

首先,哈希必须连接到url:“url#conten”。 其次,服务器忽略url中的哈希值;它们只能由客户端(浏览器)解释。

如果这没有帮助,我建议您在浏览器中使用调试工具来查看服务器的响应。

答案 1 :(得分:0)

http://api.jquery.com/load/

要加载的第二个参数可以是回调,如果您还要将数据传递到服务器,则为第3个参数:

$('#element').load(url, function() { console.log('content loaded'); });
$('#element').load(url, {some: 'parameters'}, function() { console.log('content loaded'); });

如果不知道您的页面布局和您要求的页面的一般示例,很难猜测可能会发生什么,但是:

  1. 您指定来自“#conten”的内容应从请求的页面中获取并放入当前页面的“#conten” - 两个页面上都定义了“#conten”吗?

  2. 您是否尝试过设置断点以确认正在调用加载/您是否检查过请求已发送并验证其内容?

  3. 您已经在父级和子级范围内定义了href - 虽然它们似乎没有混淆,但唯一的变量名称会降低它们混淆的机会并使代码更容易读取。

  4. 如果这些都没有帮助,您是否有一个HTML示例来演示您可以提供的问题?