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()
函数的相反函数,因为norfail()
或always()
都可以这样做。