2016-06-13 2 views
1

Это первый раз, когда я столкнулся с проблемой. Я использовал AJAX много раз.Непрерывная страница блокировки вызовов AJAX, Firefox

Я звоню в AJAX для обновления содержимого страницы. AJAX вызывается через каждые 2 секунды. Для некоторых хитов она работает правильно, но после этого я получаю следующее предупреждение о браузере Firefox

enter image description here

И это происходит только на FIREFOX, я не получаю такое предупреждение на побегушках браузера

Мой код:

function search_by_location (location_id) { 
    console.log(location_id); 

    setInterval(function(){ 

     $.ajax({ 
      type:"POST", 
      url: "<?php echo BASE_URL.'controller/function'?>", 
      data:{"key":location_id}, 
      cache:false, 
      success:function(data){ 
       $("#custom_div").html(""); 
       $("#custom_div").html(data); 
       search_by_location (location_id); 
      }, 
      error:function(err){ 
       console.log(err); 
      } 
     }); 
    }, 2000); 
} 

Что такое ISSU e? Я думаю, это связано с тем, что несколько обращений и обновление страницы. Это связано с кешем?

+0

Я думаю, что проблема из-за setinterval. из-за того, что я думаю, что каждый 2000 периода времени выполняется тот же код. – Samir

ответ

2

Проблема заключается в том, что вы делаете запрос AJAX каждые 2 секунды, но вы также также, запуская новый таймер каждый раз, когда запрос завершается. Поэтому количество запросов, которые вы делаете, растет экспоненциально. Вы должны удалить search_by_location() вызов в success обработчика:

function search_by_location (location_id) { 
    setInterval(function() { 
     $.ajax({ 
      type: "POST", 
      url: "<?php echo BASE_URL.'controller/function'?>", 
      data: { key: location_id }, 
      cache: false, 
      success: function(data){ 
       $("#custom_div").html(data); 
      }, 
      error: function(err){ 
       console.log(err); 
      } 
     }); 
    }, 2000); 
} 

отметить также, что лучший образец, которому надо следовать, чтобы использовать setTimeout() об успешном завершении запроса. Это остановит запросы от резервного копирования на клиенте, когда они занимают больше времени, чем интервал опроса:

function search_by_location (location_id) { 
    $.ajax({ 
     type: "POST", 
     url: "<?php echo BASE_URL.'controller/function'?>", 
     data: { key: location_id }, 
     cache: false, 
     success: function(data){ 
      $("#custom_div").html(data); 
     }, 
     error: function(err){ 
      console.log(err); 
     }, 
     complete: function() { 
      setTimeout(function() { 
       search_by_location(location_id); 
      }, 2000); 
     } 
    }); 
} 

Вы также можете посмотреть, чтобы с помощью WebSockets, если вам требуется, чтобы клиент всегда иметь непосредственный доступ к самому данные. Шаблоны опроса могут привести к DDoS-серверу вашего собственного сервера, если вы не будете осторожны.

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