Javascript ajax/jQuery中done函数的相反函数

Javascript ajax/jQuery中done函数的相反函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我想通过Ajax和jQuery发送表单 提交表单时,数据传输屏幕上将显示加载图像 在纯JS中,我使用了以下代码: var myForm = document.getElementById('myForm'); var xhr = new XMLHttpRequest(); myForm.addEventListener('submit', function(e){ var formData = new FormData(myForm); xhr.onreadystatecha

我想通过
Ajax
jQuery
发送表单

提交表单时,数据传输屏幕上将显示加载图像

在纯
JS
中,我使用了以下代码:

var myForm = document.getElementById('myForm');
var xhr  = new XMLHttpRequest();

myForm.addEventListener('submit', function(e){
    var formData = new FormData(myForm);
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200) {
            loading.style = "visibility:hidden;";
            alert('Authentification réussi.\n' + xhr.responseText );
        }else{
            loading.style = "visibility:visible;";
        }
    };
    xhr.open("GET", "authentification.php", true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send(formData);
    e.preventDefault();
}, false);
这就是我尝试使用的
jQuery

var jqxhr = $.ajax({
    type        : $('#myForm').attr('method'),
    url         : $('#myForm').attr('action'),
    data        : $('#myForm').serialize(),
    dataType    : 'html'
});
    

$(function(){
    $('#myForm').submit(function(event){
        jqxhr.done(function(data){
            $('#loading').hide();
            alert(data);
        });
        //Here the other method
    });
    event.preventDefault();
});
问题是我不知道发送数据时将执行的函数是什么,在纯
JS
中,我只是将else语句用于:
xhr.readyState==4&&xhr.status==200

那么,负责这一点的职能是什么

编辑: 解决方案是使用属性
beforeSend
,如下所示:

jqxhr = $.ajax({
    type        : $(this).attr('method'),
    url         : $(this).attr('action'),
    data        : $(this).serialize(),
    dataType    : 'html',
    beforeSend  : function(){
                        $('#loading').show();
                    },
        complete    : function(){
                            $('#loading').hide();
                    }
})

您需要在提交处理程序中发送ajax请求。。。当您说
$.ajax(..)
时,将发送ajax请求,因为您已将代码置于全局上下文中
引用窗口对象

var jqxhr;
$(function () {
    $('#myForm').submit(function (event) {
        jqxhr = $.ajax({
            type: $(this).attr('method'),
            url: $(this).attr('action'),
            data: $(this).serialize(),
            dataType: 'html'
        }).done(function (data) {
            $('#loading').hide();
            alert(data);
        }).always(function () {
            jqxhr = undefined;
        });
        //Here the other method
    });
    event.preventDefault();
});

这可能有用。您可以使用
beforeSend
显示加载图像,并将其隐藏在
done

上,以
$(此)
我刚刚忘记修改它,我使用了
$(“#myForm”)
指令。我确实在提交处理程序中使用了
$.ajax(..)
,但我需要中止另一个处理程序上的
ajax
查询,因此我需要全局声明它。@在这种情况下,只需全局声明变量,然后在调用abort之前检查值是否未定义,如
if(jqxhr!=undefined){jqxhr.abort()}
(参见更新)为什么
jqxhr
是全局的?@Bergi从OP的评论到原始答案
,但我需要中止另一个处理程序上的Ajax查询,因此我需要全局声明它
,尽管我不建议将其创建为全局变量,但我可以建议将其用作闭包variable@ArunPJohny,谢谢,这很有帮助,但最初的问题是我需要
done()
函数的相反函数,因为nor
fail()
always()
都可以这样做。