2010-06-08 4 views
2

Итак, вот мой вопрос. Использование javascript/jQuery В настоящее время я загружаю файл XML с именем файла, например 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'); 
      } 
     }); 

ответ

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

Это всегда будет пытаться только один запрос, так как 'success' не могу установить в '0' снова до возвращения AJAX вызова (с помощью которого указывают петля давно назад пришел к выводу). – VoteyDisciple

+0

@VoteyDisciple - yuk ... забыл установить async ... done. Хороший пикап. – DVK

+0

это, похоже, не работает ... он не дает никаких ошибок .. карусель просто перестает работать ... он, похоже, не собирается входить в цикл for. Я застрял в этом предупреждении и не получил ответа – 2010-06-08 18:20:45

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); 
+0

У этого есть возможность бесконечного цикла, если файл вообще не существует (это то, что вы подразумевали под резервным механизмом?). Это может также быть StackOverflow, если поиск должен быть достаточно длинным - каламбур не предназначен. См. Http://novemberborn.net/2007/08/javascriptcallstack-size-120 для лимитов – DVK

+0

Я согласен. Я предлагал построить механизм «спасения». Я пошел вперед и добавил один. – VoteyDisciple

+0

все еще имеет проблему SO от слишком большого количества ресусов, хотя для поиска на 1 день назад это не проблема. – DVK

Смежные вопросы