检查jquery(或ajax)函数是否完成

时间:2015-03-31 07:30:25

标签: javascript php jquery ajax

我目前正在运行此代码:

$("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事件之前,我需要以某种方式检查这些函数何时完成?

3 个答案:

答案 0 :(得分:2)

jQuery ajax有doneerroralways的回调。

Check out the docs

当呼叫成功结束,出错或分别(或分别)时,这些功能被激活。

答案 1 :(得分:1)

您可以使用promise

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

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

请检查making-promises-with-jquery-deferred

的明确说明

答案 2 :(得分:0)

为了触发它,你需要使用一个返回适当响应的函数。通过最初创建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')
});
....