jQuery ajaxForm有时完成工作,有时它只触发本机javascript函数然后停止

时间:2014-03-21 13:48:38

标签: javascript php jquery html

这可能是this topic的重复,但我必须重振它,因为我的问题似乎比这更深一些。我目前正在使用 ajaxForm()向PHP脚本提交4个问题测验,接收结果,然后将其填充回DIV。触发beforeSend函数,将信息发送到ajax.php脚本。 beforeSend还在测验容器中显示加载图形。然后complete函数正确触发,因为ajax.php返回要填充回DOM的HTML。那时,一切都停止了。下一行是调用slideUp加载div,然后在quizContainer中显示返回的信息。

此时如果我输入一个javascript alert,它总是会触发,这意味着complete至少会触发它,但是对加载div的jQuery引用完全被忽略。这是处理提交的javascript文件的代码 - 处理此问题的部分是"处理测验提交":

$(document).ready(function () {
// Get rid of the message box after 15 seconds
setTimeout(function() {
    $('#message').slideUp('fast');
}, 10000);

// Handle the Course List LIs
$('#courseList li').on('click', function () {
    // Get the background color as it's set initially
    var color = $(this).attr('oColor');
    jQuery('div', this).toggle('slow', function () {
        if ($(this).is(":hidden")) {
            $(this).css('background-color', color);
        }
    });

    // Change the background to be the same as the content background when it's expanded
    if ($(this).is(":hidden")) {
        $(this).css('background-color', '#33CC66');
    } else {
        $(this).removeAttr('style');
    }
});

// Handle the quiz submission
jQuery.fn.exists = function(){return this.length>0;}
if ($('#quizForm').exists()) {
    $('#quizForm').ajaxForm({
        beforeSend: function() {
            $('#quizContainer').slideUp('fast', function () {
                $('#loading').show();
            });
        },
        complete: function(xhr, theStatus) {
            alert(theStatus);
            $('#loading').slideUp('fast', function () {
                $('#quizContainer').html(xhr.responseText);
                $('#quizContainer').show();
            });
        }
    });
}

});

如果有人希望看到它的实际应用,我可以提供更多信息和临时登录来访问它。我目前正在使用jQuery 1.8.1(。)

感谢您的帮助! 乔恩

1 个答案:

答案 0 :(得分:0)

我认为complete函数的第一个参数是xhr.responseText而不是xhr对象,它实际上是第三个参数。尝试从.responseText功能中删除complete: