Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免使用ajax进行多个绑定_Javascript_Jquery - Fatal编程技术网

Javascript 避免使用ajax进行多个绑定

Javascript 避免使用ajax进行多个绑定,javascript,jquery,Javascript,Jquery,在“模式”面板中选择“框更改”。我触发了一个ajax请求,并根据响应加载模式面板数据 我看到最初只有一个请求在第一次尝试时被触发。但随着使用select选项的次数的增加,它会不断增加 下面是我的剧本 $(".dds").msDropDown(); $('#dropdown').off('change'); $('#dropdown').on('change', takeAction); function takeAction(event){ event.preventDefault(); va

在“模式”面板中选择“框更改”。我触发了一个ajax请求,并根据响应加载模式面板数据

我看到最初只有一个请求在第一次尝试时被触发。但随着使用select选项的次数的增加,它会不断增加

下面是我的剧本

$(".dds").msDropDown();
$('#dropdown').off('change');
$('#dropdown').on('change', takeAction);

function takeAction(event){
event.preventDefault();
var colour = $('#colors .selected').attr('data-color');
console.log(colour);
new Ajaxinator().jsonPost({
    url :$(event.currentTarget).val(),
    data : {
        name : $(event.currentTarget).attr('title'),
        colour : colour
    },
    success: function (response)
    {   
    $('#dropdown').off('change');

    $('#Data').html(response.Data);
    $('#dropdown').off('change',takeAction);

}
});

};

我认为这是因为新绑定为dropdown创建的每个ajax请求以及onchange函数都会多次调用。有人能帮我吗。

你能试试这个吗

var oAJAXRequest = false; //GLOBAL VARIABLE

$("#dropdown").unbind('change');
$("#dropdown").bind('change', takeAction);


function takeAction(){

    if(oAJAXRequest != false){
      return;
    }

    event.preventDefault();
    var colour = $('#colors .selected').attr('data-color');
    oAJAXRequest = $.ajax({
        type: 'POST',
        url: $(event.currentTarget).val(),
        data : {
          name : $(event.currentTarget).attr('title'),
          colour : colour
        },
        success: function(data) {
            $('#Data').html(response.Data);
            oAJAXRequest = false;
        },
        error: function(jqXHR, sMessage, oException) {
            oAJAXRequest = false;
        }
    });
}
我曾经

$('#dropdown').off('change',takeAction);

为我工作。

我不确定我是否了解问题所在。。。您当前的代码告诉浏览器,每当下拉列表更改(即选择新选项)时,都要调用takeAction函数。这不是你想要的吗?或者还有其他问题吗?但是这些函数调用了多次。最初,当我更改下拉列表时,它只调用了一次,这很好。当我再次更改下拉列表时,这个函数调用了两次。并且它一直在增加。嗯,从我看到的情况来看,这不应该发生。。。也许问题出在HTML或Javascript的另一部分?还有,什么是.msDropDown?这是自定义下拉列表吗?也许问题就在于此。我在模式面板中有一个模式面板,我有一个下拉菜单,它是用dd插件设计的。当我选择下拉菜单时,它将生成一个ajax请求,并用响应中的数据重新绘制面板。上面的脚本将是响应数据的一部分。这也将与每个请求绑定。啊,尝试将成功函数更改为:success:function response{$'dropdown'。off'change';$'data'。htmlresponse.data;$'dropdown'。on'change',takeAction;}我将oAJAXRequest更改为true。然后我只处理第一个下拉列表更改。从下一次我将下拉列表更改为其他值时,它只是调用return。请使用问题的编辑链接添加其他信息。“发布答案”按钮只能用于完整回答问题。djot,我想回答我的问题,我在回答部分回答了