使用今天的日期在文件名中加载XML文件...如果今天的日期不存在,则需要回退到旧文件

时间:2010-06-08 16:49:07

标签: javascript jquery xml ajax datetime

所以这是我的问题。使用javascript / jQuery我目前正在加载一个文件名为carousel_large_2010-06-08.xml的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 个答案:

答案 0 :(得分:1)

这是一个提议的(未经测试的)解决方案。我主要基于你的,但是考虑了日期字符串计算。将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');
}

答案 1 :(得分:0)

我假设你在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);