2 votes

Chargement d'un fichier XML avec la date du jour dans le nom du fichier... besoin de revenir à l'ancien fichier si celui avec la date du jour n'existe pas.

Voici donc ma question. En utilisant javascript/jQuery, je charge actuellement un fichier XML qui a un nom de fichier tel que carousel_large_2010-06-08.xml. La façon dont je le fais est de vérifier la date du jour puis de saisir un fichier qui a cette date dans le nom de fichier... Le problème est que parfois ils ne vont pas télécharger un nouveau fichier pour un jour donné, il faut donc revenir à une date plus ancienne qui existe... Vous vous demandez comment faire ? Voici mon code :

        // set date for xml file
        var currentTime = new Date(),
            month = currentTime.getMonth() + 1,
            day = currentTime.getDate(),
            year = currentTime.getFullYear();

        if(month.toString().length == 1){
            month = '0'+month.toString();
        }
        if(day.toString().length == 1){
            day = '0'+day.toString();
        }

        var dateObject = year+"-"+month+"-"+day;

        // start magic
        $jq.ajax({
            type: "GET",
            url: "_xml/carousel/home/carousel_large_"+dateObject+".xml",
            dataType: "xml",
            success: HPCarousels.heroCarousel.parseXML,
            error: function(){
                alert('Error Loading XML Content');
            }
        });

1voto

DVK Points 63282

Voici une proposition de solution (non testée). Je l'ai largement basée sur la vôtre, mais j'ai supprimé le calcul de la chaîne de date. Définissez maxOffset au nombre maximum de jours que vous souhaitez consulter (dans votre question, vous avez dit hier, donc 1 )

function getDateString(offset) {

    // set date for xml file
    var currentTime = new Date().setDate(today.getDate()-offset),
        month = currentTime.getMonth() + 1,
        day = currentTime.getDate(),
        year = currentTime.getFullYear();

    if(month.toString().length == 1){
        month = '0'+month.toString();
    }
    if(day.toString().length == 1){
        day = '0'+day.toString();
    }

    return year+"-"+month+"-"+day;
}

var maxOffset = 1;
var success = 0;
for(var offset = 0; offset <= maxOffset && !success; offset++) {
    success = 1;
    // start magic
    var dateString = getDateString(offset);
    $jq.ajax({
        type: "GET",
        async: false; 
        url: "_xml/carousel/home/carousel_large_"+dateString+".xml",
        dataType: "xml",
        success: HPCarousels.heroCarousel.parseXML,
        error: function(){
            success = 0;

        }
    }); 
}
if (!success) {
    alert('Error Loading XML Content');
}

0voto

VoteyDisciple Points 23229

Je suppose que vous ne savez pas si le fichier est manquant avant le retour de l'appel AJAX, donc à ce moment-là vous pouvez tenter une autre recherche.

function getDate(timestamp) {
    month = timestamp.getMonth() + 1,
    day = timestamp.getDate(),
    year = timestamp.getFullYear();

    return year + '-' + ((month < 10) ? '0' + month : month) + '-' + ((day < 10) ? '0' + day : day);
}

function attemptGet(timestamp, attempt) {
    if (attempt >= 3) // Maximum number of attempts
        return;
    $jq.ajax({
        type: "GET",
        url: "_xml/carousel/home/carousel_large_"+dateObject+".xml",
        dataType: "xml",
        success: HPCarousels.heroCarousel.parseXML,
        error: function(){
            if (/* file is missing */) {
                attemptGet(timestamp - 24 * 60 * 60, attempt + 1);
            } else {
                alert('Error Loading XML Content');
            } 
        }
    }); 
}
attemptGet(0);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X