Mam pewne problemy z utworzoną przez nas kontrolką jQuery. Załóżmy, że masz listę rozwijaną, która umożliwia wprowadzenie identyfikatora poszukiwanego elementu, a po naciśnięciu klawisza ENTER lub utracie fokusu w polu tekstowym sprawdza ona za pośrednictwem jQuery, że wprowadzony identyfikator jest poprawny, wyświetlając alert, jeśli tak nie jest 't.
Chodzi o to, że gdy zwykły użytkownik wpisze w niej nieprawidłową wartość i straci fokus poprzez naciśnięcie przycisku wysyłania, post jQuery wraca po wysłaniu formularza.
Czy jest jakiś sposób, żebym mógł sprawdzić, czy istnieje przetwarzanie żądań asynchronicznych przez jQuery, abym nie zezwalał na przesyłanie formularza?
jquery
ajax
xmlhttprequest
sabanito
źródło
źródło
$.active
zwraca liczbę aktywnych żądań Ajax.Więcej informacji tutaj
źródło
$(function () { function checkPendingRequest() { if ($.active > 0) { window.setTimeout(checkPendingRequest, 1000); //Mostrar peticiones pendientes ejemplo: $("#control").val("Peticiones pendientes" + $.active); } else { alert("No hay peticiones pendientes"); } }; window.setTimeout(checkPendingRequest, 1000); });
źródło
Funkcja $ .ajax () zwraca obiekt XMLHttpRequest. Przechowuj to w zmiennej, która jest dostępna ze zdarzenia „OnClick” przycisku Prześlij. Po przetworzeniu kliknięcia przesyłania sprawdź, czy zmienna XMLHttpRequest to:
1) null, co oznacza, że żadne żądanie nie zostało jeszcze wysłane
2), że readyState ma wartość 4 (Loaded). Oznacza to, że żądanie zostało wysłane i zwrócone pomyślnie.
W każdym z tych przypadków zwróć wartość true i pozwól, aby przesyłanie było kontynuowane. W przeciwnym razie zwróć false, aby zablokować przesyłanie i dać użytkownikowi pewne wskazanie, dlaczego ich przesłanie nie zadziałało. :)
źródło
request.readyState > 0 && request.readyState < 4
aby określić żądanie „aktywne”, ponieważ readyState 0 wskazuje, że chociaż obiekt został utworzony, żądanie sieciowe nie zostało zainicjowane .Musimy użyć metody $ .ajax.abort () , aby przerwać żądanie, jeśli jest ono aktywne. Ten obiekt obietnicy używa właściwości readyState, aby sprawdzić, czy żądanie jest aktywne, czy nie.
HTML
<h3>Cancel Ajax Request on Demand</h3> <div id="test"></div> <input type="button" id="btnCancel" value="Click to Cancel the Ajax Request" />
Kod JS
//Initial Message var ajaxRequestVariable; $("#test").html("Please wait while request is being processed.."); //Event handler for Cancel Button $("#btnCancel").on("click", function(){ if (ajaxRequestVariable !== undefined) if (ajaxRequestVariable.readyState > 0 && ajaxRequestVariable.readyState < 4) { ajaxRequestVariable.abort(); $("#test").html("Ajax Request Cancelled."); } }); //Ajax Process Starts ajaxRequestVariable = $.ajax({ method: "POST", url: '/echo/json/', contentType: "application/json", cache: false, dataType: "json", data: { json: JSON.encode({ data: [ {"prop1":"prop1Value"}, {"prop1":"prop2Value"} ] }), delay: 11 }, success: function (response) { $("#test").show(); $("#test").html("Request is completed"); }, error: function (error) { }, complete: function () { } });
źródło