Загрузка XML-файла с текущей датой в имени файла ... необходимо выполнить откат к старому файлу, если файл с текущей датой не существует - PullRequest
2 голосов
/ 08 июня 2010

Так вот мой вопрос. Используя javascript / jQuery, я в настоящее время загружаю файл XML, который имеет имя файла, например carousel_large_2010-06-08.xml. То, как я это делаю, проверяется на текущую дату, а затем захватывает файл с этой датой в имени файла. ... проблема в том, что иногда они не будут загружать новый файл для данного дня, поэтому необходимо вернуться к более старой дате, которая существует .. Хотите знать, как это сделать? Вот мой код:

        // 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');
            }
        }); 

Ответы [ 2 ]

1 голос
/ 08 июня 2010

Вот предлагаемое (непроверенное) решение.Я основал это в основном на вашем, но учел расчет строки даты.Задайте для maxOffset максимальное количество дней, которое вы хотите посмотреть назад (в своем вопросе вы сказали вчера, поэтому 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');
}
0 голосов
/ 08 июня 2010

Я предполагаю, что вы не знаете, отсутствует ли файл до тех пор, пока не вернется вызов AJAX, поэтому в этот момент вы можете попытаться выполнить другой поиск.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...