繁体   English   中英

检查jquery(或ajax)功能是否完成

[英]Check if jquery (or ajax) function is done

我当前正在运行以下代码:

$("document").ready(function() {
    $(".tableCourses td:first").trigger('click');
    setTimeout(function() {
        $(".tableTutors tr:eq(1) td:eq(0)").trigger('click');
        setTimeout(function() {
            $(".tableForms tr:eq(1) td:eq(0)").trigger('click');
            setTimeout(function() {
                $(".tableDivision tr:eq(2) td:eq(3)").trigger('click');
            }, 800);
        }, 700);
    }, 600);
});

这基本上是为我拥有的每个表的每个第一个单元格激活我的onclick事件。

不要判断..这就是我需要的。 setTimeout有点丑陋,它只能工作一半时间。

问题是每个表都必须加载ajax,这可能需要一些时间。 当我使用此代码时:

$("document").ready(function() {
    $.when($(".tableCourses td:first").trigger('click')).then(function() {
        $.when($(".tableTutors tr:eq(1) td:eq(0)").trigger('click')).then(function() {
            $.when($(".tableForms tr:eq(1) td:eq(0)").trigger('click')).then(function() {
                $(".tableDivision tr:eq(2) td:eq(3)").trigger('click');
            });
        });
    });
});

该页面仅执行第一个单击处理程序,该处理程序将加载下一个表。 我在使用$.when$.then吗? 我的语法错误吗?

我通常不接触jquery或ajax,所以我有点漆黑。

另一个注意事项:第一次单击必须从两个单独的php页面中加载两个表,因此需要更长的时间。

编辑 :我只是意识到$.when$.then仅适用于单击激活,而不是整个ajax加载。 有什么方法可以检测到何时完成?

编辑2 :这是onclick事件,每次点击几乎相同:

<script>
    function courseToTutor(id) {
        var clickedCourse = document.getElementById("course" + id).value;
        $.post('loadTutors', {postname: clickedCourse}, function() {
            $('#loadTutors').load('loadTutors.php');
            $('#loadForms').load('loadForms.php');
        });
        ;
        window.scrollTo(0, 0);
    }
</script>

这很复杂..大声笑。 在启动页面加载的下一个onclick事件之前,我需要以某种方式检查这些功能何时完成?

jQuery ajax具有针对doneerroralways回调。

查看文档

当成功,有错误或无论如何成功结束呼叫后,将激活这些功能。

你可以用诺言

var promise = $.ajax({
  url: "/ServerResource.txt"
});

promise.done(successFunction);
promise.fail(errorFunction);
promise.always(alwaysFunction);

请检查对jquery-deferred的承诺的明确解释

为了随后被触发,您需要使用一个返回适当响应的函数。 当解析或拒绝Deferred时,通常通过最初创建Deferred的代码进行解析,则将调用适当的回调。 例如,由jQuery.ajax()返回的jqXHR对象是Promise兼容的对象。 触发器不返回Promise兼容对象,因此您应该手动返回成功的Promise兼容对象。 例如:

var myResponse = $.Deferred();
$(".tableTutors tr:eq(1) td:eq(0)").trigger('click');
myResponse .resolve( "clicked" );
$.when(myResponse ).then(function() {
  $(".tableForms tr:eq(1) td:eq(0)").trigger('click')
});
....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM