重复AJAX REQUEST问题

时间:2013-11-30 12:40:58

标签: jquery ajax

我在jquery UI模式对话框中有一个按钮。单击时,该按钮发送AJAX请求,并在MODAL DIALOG内部使用提交按钮打开html表单。

        $('#buttonid').click(function(){
            var id = $('.sec_id').val();
            $.ajax({
            url: "parts/hesabat_dialog.php",
            cache: false,
            data: {"id": id},

            beforeSend: function() {
             . . .
            },
            success: function(html){
             . . .
            }
            });
            return false;
        });

然后我填写表单并单击提交按钮(这不是#buttonid),我发送另一个ajax请求,表单的所有数据都发送到页面do.php。

    $('#Formid').submit(function() {
        var data = $('#Formid').serialize();
        var id = $('#id').val();
        var url = 'element.php?id='+id;
        $.ajax({
        type: "POST",
        url: "parts/do.php",
        cache: true,
        data: data,

        beforeSend: function() {

        $('#dialog').append('Loading...');

        },

        success: function(data){
            $("#dialog").load(url);
        }
     });
        $("#Formid").unbind('submit');
        return false;
    });

所以,问题是如果我点击#buttonid 5或6次,那么提交请求将被发送6次。你可以说使用unbind。好的,在这种情况下unbind应该有帮助,但是你知道有3个按钮,如果我点击另一个按钮并再次返回#buttonid ajax请求将无效,如果我使用unbind,然后关闭模态对话框,并重新打开它,ajax请求将无法再次运行。我提交时如何禁用多个请求(做一次),虽然按钮被点击了10次?

3 个答案:

答案 0 :(得分:1)

$(document).ready(function(){
$('.one-click').click(function(){
    if($(this).data('clicked')){
        return false;
    }
    else {
        $(this).data('clicked', true);
        setTimeout(function(){
      $('.one-click').data('clicked', false)
    }, 2000);
    }
});

});

使用数据变量将数据单击的值设置为true,并为后续请求返回false,一旦调用成功,再次将其设为false并完成。

答案 1 :(得分:1)

我在我正在加载的AJAX HTML文件中包含了js文件。当我从DOM重新加载或清除HTML时,它仍然保留脚本。我将脚本移出,因此它不是正在加载的HTML的一部分。

答案 2 :(得分:0)

您可以定义一个变量(在按钮操作范围之外),其中包含ajax请求的状态。

    var button_ajax_state_sending = false;

    $('#Formid').submit(function() {
     if(!button_ajax_state_sending){ //only start if false (not sending)
            var data = $('#Formid').serialize();
            var id = $('#id').val();
            var url = 'element.php?id='+id;
            $.ajax({
            type: "POST",
            url: "parts/do.php",
            cache: true,
            data: data,

            beforeSend: function() {

            $('#dialog').append('Loading...');
            button_ajax_state_sending = true; // SET TRUE

            },

            success: function(data){
                $("#dialog").load(url);
                button_ajax_state_sending = false; // SET TRUE
            }
      });
      return false;
   });