Jak dzwonić.ajaxStart () na konkretnych wywołaniach ajax
Mam kilka wywołań ajax na dokumencie witryny, które wyświetlają lub ukrywają pasek postępu w zależności od stanu ajax
$(document).ajaxStart(function(){
$('#ajaxProgress').show();
});
$(document).ajaxStop(function(){
$('#ajaxProgress').hide();
});
Chciałbym zasadniczo overwirte te metody w innych częściach strony, gdzie wiele szybkich małych połączeń ajax są wykonane i nie trzeba pasek postępu pojawiały się i out. Próbuję je dołączyć lub wstawić do innych $.getJSON i $.połączenia ajax. Próbowałem ich łańcuchować, ale najwyraźniej nie jest to dobre.
$.getJSON().ajaxStart(function(){ 'kill preloader'});
10 answers
2018 Uwaga: Ta odpowiedź jest przestarzała; możesz zaproponować edycję tej odpowiedzi, która będzie działać.
Możesz powiązać ajaxStart i ajaxStop używając niestandardowej przestrzeni nazw:
$(document).bind("ajaxStart.mine", function() {
$('#ajaxProgress').show();
});
$(document).bind("ajaxStop.mine", function() {
$('#ajaxProgress').hide();
});
Następnie, w innych częściach strony będziesz tymczasowo odpiąć je przed twój .wywołania json:
$(document).unbind(".mine");
Pomysł zaczerpnąłem z tutaj podczas poszukiwania odpowiedzi.
EDIT: nie miałem czasu go przetestować, niestety.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-05 15:13:14
Jeśli umieścisz to w swojej funkcji, która obsługuje akcję ajax, będzie ona wiązać się tylko wtedy, gdy jest to właściwe:
$('#yourDiv')
.ajaxStart(function(){
$("ResultsDiv").hide();
$(this).show();
})
.ajaxStop(function(){
$(this).hide();
$(this).unbind("ajaxStart");
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-16 02:36:47
W obiekcie options znajduje się atrybut .ajax() przyjmuje wywołanie global .
Jeśli ustawione na false , nie wywoła zdarzenia ajaxStart dla wywołania.
$.ajax({
url: "google.com",
type: "GET",
dataType: "json",
cache: false,
global: false,
success: function (data) {
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-10 09:24:00
Ponadto, jeśli chcesz wyłączyć wywołania .ajaxStart()
i .ajaxStop()
, możesz ustawić opcję global
na false
w zapytaniach .ajax()
;)
Zobacz więcej tutaj: jak dzwonić .ajaxStart() na konkretnych wywołaniach ajax
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:34
Użyj lokalnych zdarzeń Ajax
success: function (jQxhr, errorCode, errorThrown) {
alert("Error : " + errorThrown);
},
beforeSend: function () {
$("#loading-image").show();
},
complete: function () {
$("#loading-image").hide();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-09 01:32:06
Niestety, ajaxStart event nie posiada żadnych dodatkowych informacji, których możesz użyć, aby zdecydować, czy chcesz pokazać animację, czy nie.
W każdym razie, mam jeden pomysł. W metodzie ajaxStart, dlaczego nie rozpocząć animacji po powiedzmy 200 milisekundach? Jeśli żądania ajax zostaną zakończone w ciągu 200 milisekund, nie zostanie wyświetlona Żadna animacja, w przeciwnym razie zostanie wyświetlona animacja. Kod może wyglądać mniej więcej tak:var animationController = function animationController()
{
var timeout = null;
var delayBy = 200; //Number of milliseconds to wait before ajax animation starts.
var pub = {};
var actualAnimationStart = function actualAnimationStart()
{
$('#ajaxProgress').show();
};
var actualAnimationStop = function actualAnimationStop()
{
$('#ajaxProgress').hide();
};
pub.startAnimation = function animationController$startAnimation()
{
timeout = setTimeout(actualAnimationStart, delayBy);
};
pub.stopAnimation = function animationController$stopAnimation()
{
//If ajax call finishes before the timeout occurs, we wouldn't have
//shown any animation.
clearTimeout(timeout);
actualAnimationStop();
}
return pub;
}();
$(document).ready(
function()
{
$(document).ajaxStart(animationController.startAnimation);
$(document).ajaxStop(animationController.stopAnimation);
}
);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-28 01:46:12
Użyj funkcji beforeSend lub complete callback w wywołaniu ajax w ten sposób..... Przykład na żywo jest tutaj https://stackoverflow.com/a/34940340/5361795
Source ShoutingCode
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:07
Mam rozwiązanie. Ustawiłem globalną zmienną js o nazwie showloader (domyślnie ustawioną jako false). W każdej z funkcji, które chcesz pokazać loader wystarczy ustawić go na true przed wykonaniem połączenia ajax.
function doAjaxThing()
{
showloader=true;
$.ajax({yaddayadda});
}
Wtedy mam następujące w sekcji głowy;
$(document).ajaxStart(function()
{
if (showloader)
{
$('.loadingholder').fadeIn(200);
}
});
$(document).ajaxComplete(function()
{
$('.loadingholder').fadeOut(200);
showloader=false;
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-21 04:14:25
Użyj ajaxSend i ajaxComplete, jeśli chcesz interspektować żądanie przed podjęciem decyzji, co zrobić. Zobacz moją odpowiedź tutaj: https://stackoverflow.com/a/15763341/117268
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:34
<div class="Local">Trigger</div>
<div class="result"></div>
<div class="log"></div>
$(document).ajaxStart(function() {
$( "log" )text( "Trigger Fire successfully." );
});
$( ".local" ).click(function() {
$( ".result" ).load("c:/refresh.html.");
});
Po prostu przejrzyj ten przykład, masz jakiś pomysł.Gdy użytkownik kliknie element z klasą Local i zostanie wysłane żądanie Ajax, zostanie wyświetlony komunikat dziennika.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 11:58:04