1
I have a code that is working relatively well but has a small problem that I do not know how to solve...
On one page I have several combos that when clicking launch orders ajax and will complete other combos and simultaneously restrict a table with the new values. It seems quite complicated but even is not and is working well except when I launch an ajax request it has the famous image to inform that the request is ongoing and that it disappears when the data is returned.
Now with me this is not running well , because when I make the request that implies updating the combo and table (this request is what returns more data because it is when there is still a lot of information to filter) it updates the combo well but has a difference of updating the table that can be several seconds, the image disappears and 4 or 5 seconds after the table data update...
I’ll leave the part of the code where I put the requests and the ajax functions, to try to understand if this is where the problem comes from... if you need other codes to understand the rest of the process just ask.
<script type="text/javascript" src="js/jquery-1.4.4.js"></script>
<script type="text/javascript">
/*first call----------*/
$(document).ready(function () {
$(".drop").change(function () { // ao clicar no combo mostra a div onde estao as
imagens de processamento enquanto a resposta não é page complete
$(document).ajaxStart(function () {
$("#wait").css("display", "block");
});
$(document).ajaxComplete(function () {
$("#wait").css("display", "none"); // ao obter resposta de complete volta a esconder
a div que tem as imagens de processamento
});
var id = $(this).val();
var dataString = empresa + id; // establece agumas variaveis a passar no pedido
ajax
$.ajax({
type: "POST",
url: "empresa.php",
data: dataString,
success: function (html) {
$("#tab2").html(html); // retorna o valor do processado na pagina do
pedido e substitui a div com esse valor
$("#tab3").text(" "); // insere texto em branco para "limpar" as outras
divs
$("#tab4").text(" ");
/*second call*/
$.ajax({ // em simultaneo com o 1º pedido lança este
pedido a uma pagina diferente para retornar em uma div diferente
type: "POST",
url: "lista.php",
data: dataString,
success: function (html) {
$("#nomes").css("display", "block");
$("#nomes").html(html);
}
});
}
});
Create a global counter of how many ajax are occurring. When performing an ajax, you increment this variable and in "complete:" you decrement and call the function to show the loading. In the loading function checks that the counter is greater than 0 and does not hide while the counter is not 0.
– Roger Barretto
but should not function $(Document). ajaxComplete(Function() control all ajax requests since it is a global(if I am not saying any nonsense...)so I can repeat the code to every ajax request I make...but this also does not help, because it seems to me that the page receives the code to complete, although the table is not yet fully generated...
– user3415003
Yes, but if there is any gap between a complete ajax and another start this ajaxComplete will be called before the time. In any case leave a break point in this function and see what is the inappropriate time it is being called.
– Roger Barretto
any chance to help me with this code for breackpoint ? I’m very green in these things? Thanks
– user3415003
user, line of action complementary to that suggested by Roger, I would encourage you to create a fiddle emulating the problem. You can emulate false ajax responses (with delay) using the API of echo. To have a sense of the delay of your current services use the tab Network chrome (
Ctrl+Shift+I
) or similar. Read more about the Chrome debuger at https://developers.google.com/chrome-developer-tools/docs/javascript-debugging.– Anthony Accioly