2012-06-04 2 views
2

У меня есть интервал, который запускает вызов AJAX, чтобы проверить, есть ли обновление для страницы (я полагаю, что это похоже на механизм, используемый Facebook или StackExchange для проверки новых уведомлений). Проблема заключается в том, что этот вызов изменяет курсор на курсор «прогресс» или «занят» (визуальная проблема) и отключает возможность выбора ссылок (функциональная проблема).Как избавиться от курсора «progress»?

Я полагаю, что обе проблемы связаны. Как можно избавиться от этого эффекта или, по крайней мере, минимизировать последствия?

Некоторый код:

setInterval(function() { 
    try { 
     var mid = $($("ul#alert-messages li.regular")[0]).attr('ref'); 
     call_ajax('/load_alerts', {num:0, id:mid}, function (data) { 
      if (data.ok) { 
       for (var i=0; i<data.result.length; i++) { 
        // .... 
       } 
       // ... 
      } 
     }, function() {},   // Do not show any error for this!! 
     false);     // Do not change cursor! 
    } catch (e) {} 
}, 15000); 

function call_ajax(url, data, fnSuccess, fnError) { 
    $.ajax({ 
     'url': url, 
     'type': 'POST', 
     'data': data, 
     'dataType': "json", 
     'success' : function(data) { 
      if (fnSuccess) { 
       fnSuccess(data); 
      } else { 
       if (typeof data.msg != 'undefined') { 
        topBar(data.msg, typeof data.ok != 'undefined' && data.ok? 'message' : 'error'); 
       } 
      } 
     }, 
     error : function (jqXHR, textStatus, errorThrown) { 
      console.log(errorThrown); 
      if (fnError) { 
       fnError(STR_ERROR_AJAX + textStatus); 
      } else { 
       topBar(STR_ERROR_AJAX + textStatus, 'error'); 
      } 
     } 
    }); 
} 
+0

не могли бы вы разместить свой код? – dm03514

+0

Это делает это во всех браузерах? Можете ли вы воспроизвести проблему с минимальным примером на http://jsfiddle.net? –

+0

@ Xeon06: Я испытываю это в FF и Chrome (Linux). Не тестировались в других системах. Не могу дать образец js, потому что мне понадобится сценарий на стороне сервера, чтобы ответить на AJAX. – Ivan

ответ

2

Я считаю, что добавив опцию асинхр: истинно вашему АЯКС вызов будет делать. В противном случае браузер замерзнет, ​​пока ajax не остановится, и это не то, что вы хотите

+0

Согласно http://api.jquery.com/jQuery.ajax/ async установлен по умолчанию, в любом случае я попытался установить его в явном виде и тот же результат :( – Ivan

+0

Можете ли вы разместить какой-либо код, пожалуйста? Ajax не должен вести себя так, какой браузер вы используете? –

+0

Chrome и FF в Linux – Ivan

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