Bonjour à tous
Je vous présente mon pb sue lequel je planche depuis un petit moment. Ce pb existe uniquement sur IE et Chrome et pas sur Firefox .
J'ai tout d'abord une première requête Ajax qui affiche sur l'écran de l'utilisateur un tableau affichant une liste de donnée à traiter :
Ensuite la fonction attente exécute pour chaque ligne de donnée à traiter un appel ajax
Mon pb est le suivant toutes les modifications du DOM comme $('#texte_'+i).text("Traitement terminé ..."); ne s'affichent pas . J'ai en fait tout qui s'affiche à la fin du traitement sauf si je fais un alert juste après cette ligne où l'a ca fonctionne. Mais dès que je retire l'alert l'utilisateur ne voit rien et c'est seulement à la fin du traitement que tout s'affiche. Sous Firefox tout fonctionne on voit bien les .hide() s'executer.
Je sais que lorsque l'on fait de l'ajax on doit être en asynchrone mais là j'ai besoin que l'utilisateur patiente de manière et voit le traitement s'effectuer petit à petit.
Par avance merci de vos réponses.[/i][/i]
Modifié par kgb (20 Jan 2015 - 14:51)
Je vous présente mon pb sue lequel je planche depuis un petit moment. Ce pb existe uniquement sur IE et Chrome et pas sur Firefox .
J'ai tout d'abord une première requête Ajax qui affiche sur l'écran de l'utilisateur un tableau affichant une liste de donnée à traiter :
function traitement(nomfichier,codetgc,idlot)
{
$('#content').html("");
if (nomfichier!="" && codetgc!="" && idlot>0)
{
foo = new Date().getTime(); // var unique permettant de rendre l'appel AJAX unique afin de ne pas utiliser le cache d'IE
$.ajax({
url: "traitementlot_ajax.php",
data: {dummy:foo,nomfichier:nomfichier,codetgc:codetgc,idlot:idlot},
type: 'get',
async: false,
cache: false,
beforeSend: function (){/*$("#divLoading").show();*/},
success: function (data)
{
//$("#divLoading").fadeOut();
$('#content').html(data);
//var test_affiche = affiche_content(data);
$( "#content" ).show("fast", function() {
// Animation complete.
attente(idlot);
});
},
error: function (xhr,data,errorretour) {var machain = "";for (i in errorretour) machain += i + " " + errorretour[i] + "\n"; alert(data + " " + machain);}, dataType : 'text'
});
}
}
Ensuite la fonction attente exécute pour chaque ligne de donnée à traiter un appel ajax
function attente(idlot) {
var totalok=0;
var totalnok=0;
if ($('#nbre_ref').attr('value') >0)
{
//On balaye maintenant les ref pour le traitement sous TGC
//for (var i=0;i<=$('#nbre_ref').attr('value');i++)
var i=0;
$("input[id^=refelec_]").each(
function()
{
i++;
$('#test').prop('value',i);
// Animation complete.
if (typeof $('#refelec_'+i).attr('value') == "undefined") refelec=""; else refelec=$('#refelec_'+i).attr('value');
if (typeof $('#heurecreuse_'+i).text() == "") index1 = ""; else index1=$('#heurecreuse_'+i).text();
if (typeof $('#heurepleine_'+i).text() == "") index2=""; else index2=$('#heurepleine_'+i).text();
if (typeof $('#refgaz_'+i).attr('value') == "undefined") refgaz=""; else refgaz=$('#refgaz_'+i).attr('value');
if (typeof $('#indexgaz_'+i).text() == "") index=""; else index=$('#indexgaz_'+i).text();
if (typeof $('#codeelec_'+i).text() == "") codecentreelec= ""; else codecentreelec=$('#codeelec_'+i).text();
if (typeof $('#codegaz_'+i).text() == "") codecentregaz=""; else codecentregaz=$('#codegaz_'+i).text();
if (typeof $('#idclicartet'+i).attr('value') == "") idclicartet=""; else idclicartet=$('#idclicartet'+i).attr('value');
$('#texte_'+i).text("Traitement en cours ...");
$('#texte_'+i).css("display","block");
if ((refelec!="" || refgaz!="")&&(idclicartet!=""))
{
foo = new Date().getTime(); // var unique permettant de rendre l'appel AJAX unique afin de ne pas utiliser le cache d'IE
$.ajax({
url: "/application/cartet/interfaces_tgc/transfert_index.php",
data: {dummy:foo,refelec:refelec,index1:index1,index2:index2,refgaz:refgaz,index:index,codecentreelec:codecentreelec,codecentregaz:codecentregaz,idclicartet:idclicartet},
type: 'get',
async : false,
cache: false,
beforeSend: function (){
$( "#divLoading" ).show();
},
success: function (data)
{
$("#divLoading").hide();
//$("#divLoading").fadeOut();
if (data=='1')
{
totalok++;
}
else
totalnok++;
$('#texte_'+i).text("Traitement terminé ...");
$('#table_lot tr[id="lot_' + i + '"] td').hide();
},
error: function (xhr,data,errorretour) {var machain = "";for (i in errorretour) machain += i + " " + errorretour[i] + "\n"; alert(data + " " + machain); },dataType : 'text'
});
$('#table_lot tr[id="lot_' + i + '"] td' ).css( "display", "none" );
}
});
}
Mon pb est le suivant toutes les modifications du DOM comme $('#texte_'+i).text("Traitement terminé ..."); ne s'affichent pas . J'ai en fait tout qui s'affiche à la fin du traitement sauf si je fais un alert juste après cette ligne où l'a ca fonctionne. Mais dès que je retire l'alert l'utilisateur ne voit rien et c'est seulement à la fin du traitement que tout s'affiche. Sous Firefox tout fonctionne on voit bien les .hide() s'executer.
Je sais que lorsque l'on fait de l'ajax on doit être en asynchrone mais là j'ai besoin que l'utilisateur patiente de manière et voit le traitement s'effectuer petit à petit.
Par avance merci de vos réponses.[/i][/i]
Modifié par kgb (20 Jan 2015 - 14:51)