web2py:如何检测LOAD组件何时通过ajax加载?

时间:2016-11-18 20:42:32

标签: ajax web2py asynccallback

我正在{{=LOAD(...)}}使用{{=LOAD(...)}}向我的web2py页面注入一个组件,但是我需要在加载组件后触发一些javascript。通常,如果通过ajax加载某些内容,则会有成功的回调。如何通过web2py中的{{1}}设置其中一个?

1 个答案:

答案 0 :(得分:3)

最简单的方法是在组件的控制器中设置response.js

def mycomponent():
    response.js = 'alert("mycomponent just loaded");'
    return dict()

或者,您可以直接在组件本身中包含<script>标记,该标记将在加载组件时执行。

最后,每当web2py Ajax调用完成时,都会触发ajax:complete事件。因此,您可以设置事件处理程序并检查Ajax响应是否为组件:

  $(document).on('ajax:complete', function(e, xhr, status) {
    if (xhr.getResponseHeader('web2py-component-content')) {
      alert('A component just loaded.');
    }
  });

请注意,web2py-component-content标头的存在表明Ajax响应是一个组件。

最后一种方法的唯一缺点是在组件的内容被添加到DOM之前将触发事件处理程序,因此如果事件处理程序需要很长时间才能运行,那么它可能会显着延迟组件内容的出现。