我有两个功能,submit()
$.ajax
和click()
$.post
。在$.ajax
的函数中,我使用ajaxStart()
和ajaxStop()
,但是$.post
没有。例如:
提交:
$(document).ready(function(){
$('#myform').submit(function() {
$(this).ajaxStart(function() {
$('.notice').html('Send...');
$('#send').attr('disabled', 'disabled');
});
$(this).ajaxComplete(function() {
$('#send').removeAttr('disabled');
});
$.ajax({
type: "POST",
url: 'server01.php',
data: $(this).serialize(),
success: function(data) {
switch(data){
case 'success':
$('.notice').html('Good!');
setTimeout("location.reload();",3000);
break;
default:
$('.notice').html('Error');
break;
}
} });
return false;
});
});
点击:
$(function() {
$('#language').click( function() {
$.post("language.php", { language: $(this).attr('class') } )
.success(function(data) { location.reload(); })
.error(function() { alert("error"); });
return false;
});
});
问题在于,当我运行click()
函数时,会在提交事件上激活ajaxStart()
方法。
当我使用点击功能时,有可能禁用ajaxStart()
或不运行吗?
答案 0 :(得分:2)
我认为没有可能禁用ajaxStart(),因为它对整个代码都是全局的。
但是如果你想要分离为myform元素编码的内容,你可以这样做:
$('#myform').submit(function() {
$('.notice').html('Send...');
$('#send').attr('disabled', 'disabled');
$.ajax({
type: "POST",
url: 'server01.php',
data: $(this).serialize(),
success: function(data) {
switch(data){
case 'success':
$('.notice').html('Good!');
setTimeout("location.reload();",3000);
break;
default:
$('.notice').html('Error');
break;
}
},
complete : function() {
$('#send').removeAttr('disabled');
}
});
return false;
});
答案 1 :(得分:2)
您还可以将“全局”选项添加到您不希望触发ajaxStart的ajax请求中。这将禁用此请求中的所有全局Ajax事件处理程序。
使用“global:false”时的list of Ajax events disabled
$.ajax({
type: "POST",
global: false,
url: 'server01.php',
data: $(this).serialize(),
success: function(data) {
switch(data){
case 'success':
$('.notice').html('Good!');
setTimeout("location.reload();",3000);
break;
default:
$('.notice').html('Error');
break;
}
}
});