如何在 Ajax 加载后执行 javascript?

Posted

技术标签:

【中文标题】如何在 Ajax 加载后执行 javascript?【英文标题】:How do I execute a javascript after Ajax load? 【发布时间】:2015-12-09 17:08:03 【问题描述】:

我需要在 ajax 加载后添加一个类。我首先给一些元素一个“准备好”的类,它会启动一个 css 转换。当链接 li#menu-item-318 a 被点击时,它会删除准备好的类,然后反转 css 转换,然后加载一个新的 html 文档。在 Aja 加载时,我再次想将就绪类添加到 Ajax 调用插入的相同元素中。

下面的代码有一个回调来添加准备好的类,它可以工作。但是当 Ajax 加载它的集合时,Ready 类太早了,所以没有过渡,即使我应该绘制的线条已经设置。

我在想最好我有一个脚本,用于在 html 内的转换元素上设置类,由 ajax 调用以实现我想要的效果 - 但这不起作用。那我该怎么办?

演示:http://svensson.streetstylizm.com/ 点击摄影 - 宝丽来链接查看它如何反转动画、加载页面然后只显示线条。

代码:

$(function () 
    $('.v-line, .h-line, .nav, #ban_image img').addClass('ready');
);

$('li#menu-item-318 a').click(function (e) 
    e.preventDefault();
    var linkNode = this;
    $('.v-line, .h-line, #ban_image img')
        .removeClass('ready')
        .one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend',

    function (e) 
        $(".js-pageTransition").load("photo.html .test> *");
    );
);

【问题讨论】:

您对答案的评论表明您问错了问题... 是的,看起来是这样。我的逻辑在这里失败了。 【参考方案1】:

你可以使用ajaxComplete():

$.ajaxComplete(function () 
  // Something to execute after AJAX.
);

举个例子:

$( document ).ajaxComplete(function( event,request, settings ) 
  $( "#msg" ).append( "<li>Request Complete.</li>" );
);

正如Popnoodles 所说,这会在任何 AJAX 调用完成时执行。因此,如果您希望在一个特定的 AJAX 调用中执行代码,则需要使用 success 函数。

【讨论】:

@user3344734 请记住,每次 ajax 调用完成时都会执行此函数。如果你希望它只在一个实例中发生,你应该使用成功回调。 这行得通,但给出了与 Ajax 回调相同的结果。这太烦人了。我真的不知道为什么它不会在没有准备好的类的情况下加载元素和 css - 它会跳过整个动画。我认为我没有想法。无论如何,这是正确的答案,再次感谢。【参考方案2】:

这样做的方法是使用 jQuery 中的 ajaxcomplete 函数,该函数在任何 ajax 调用完成后被隐式调用。

此链接中的示例应该可以帮助您入门

.ajaxcomplete() Function

【讨论】:

以上是关于如何在 Ajax 加载后执行 javascript?的主要内容,如果未能解决你的问题,请参考以下文章

仅在 javascript 循环完成后执行 ajax 调用

使用 ajax 分页加载页面后重新初始化其他 javascript 函数

Ajax 调用加载的 Javascript 不执行?

如何确保JavaScript的执行顺序

ajax调用后如何修复javascript? [复制]

Yii: 如何在CGridView通过Ajax方式刷新数据后执行JS脚本