2015-02-03 5 views
0

Я следующий код JS:Ajax удваивает вызов функции успеха

$('#btn_goals').on('click', function() { 
    $.ajax({ 
     url: '/Goals/Index', 
     success: function (data) { 
      $('#region_content').html(data); 
      console.log("goals fires"); 
     } 
    }); 
}); 

Стреляет на некоторых кнопки мыши и работает отлично, кроме одного странных вещей: он стреляет один раз на первую кнопку мыши, дважды на секунду, четыре раза на третьем и так далее.

Вот Google консольный вывод:

1st click: 
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/. 
content loaded myscript-002.js:8 

2nd click: 
content loaded myscript-002.js:8 
content loaded VM43:8 

3rd click: 
content loaded myscript-002.js:8 
content loaded VM43:8 
content loaded VM43:8 
content loaded VM43:8 

и так далее.

В чем причина?

+0

Вы разместили этот обработчик событий в другом обработчике событий. – adeneo

+0

Похож на '$ ('# btn_goals'). On ('click', function() {..})' выполняется несколько раз –

+0

Да, добавлен console.log («кнопки кликов») в начале моего метода обработчика непосредственно перед вызовом ajax. Кажется, что огонь тоже многократно. Но я нажимаю его только один раз каждый раз, вы можете поверить мне –

ответ

0

Если проблема с оформлением же событие несколько раз, а затем использовать это ..

$('#btn_goals').off('click'); 
$('#btn_goals').on('click', function() { 
     $.ajax({ 
      url: '/Goals/Index', 
      success: function (data) { 
       $('#region_content').html(data); 
       console.log("goals fires"); 
      } 
     }); 
    }); 

off() метод очищает предыдущее событие прикрепленную используя метод().

второй метод #updated

 $(document).off("userDistinctData"); 
     $(document).on("userDistinctData", function (e) {  
     performAjaxCall(); 
     } 
     ); 

    var performDataCall = function() { 
     $.ajax({ 
      url: '/Goals/Index', 
      success: function (data) { 
       $('#region_content').html(data); 
       console.log("goals fires"); 
      } 
     }); 
    }; 

$('#btn_goals').off('click'); 
$('#btn_goals').on('click', function() { 
    $(document).trigger({ 
         type: "userDistinctData", 
         cData: data, 
        }); 
    }); 
+0

К сожалению, не помогло –

+0

Тогда есть еще одна проблема в вашем коде ... Используйте второй метод, который я написал выше в моем ответе, чтобы дать еще одну попытку ... – Alok

0

Единственное разумное объяснение на основе кода и информации, предоставленной вами в том, что все, что вы получите обратно в HTML-код с AJAX запроса, также создает щелкните обработчик события на том же элементе #btn_goals. Скорее всего, с идентичным кодом.

Итак, проверьте результат запроса и исправьте его при необходимости.

+0

Ну, код выше актуальный все, что у меня есть. Что значит «также создает обработчик»? Где я могу это увидеть? –

+0

Если я удаляю вызов $ .ajax, то обработчик кнопки вызывает один раз щелчком. Но когда я добавляю ajax, клики начинают удваиваться каждый раз –

Смежные вопросы