在第二个函数上禁用ajaxStart()

时间:2011-11-02 16:16:40

标签: jquery ajax

我有两个功能,submit() $.ajaxclick() $.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()或不运行吗?

2 个答案:

答案 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;
        }  
    } 

});