2010-06-08 3 views
2

여기 내 질문이 있습니다. javascript/jQuery 사용하기 저는 현재 carousel_large_2010-06-08.xml과 같은 파일 이름을 가진 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 설정 나는 파일이 AJAX 호출이 반환 될 때까지 누락 된 경우 당신이 모르는 있으리라 믿고있어

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

(하는 루프는 결론을 내렸다 오래 전입니다 포인트). – VoteyDisciple

+0

@VoteyDisciple - yuk ... 비동기 설정을 잊어 버렸습니다 ... 완료되었습니다. 좋은 픽업. – DVK

+0

이 doesnt는 일하는 것처럼 보입니다 ... 그것은 어떤 에러도주지 않습니다 .. 회전 목마는 단지 작동을 멈 춥니 다 ... 그것은 for 루프로 들어가는 것처럼 보입니다 .. 나는 거기에 경고를 걸었고 응답을 얻지 못했습니다 –

0

(귀하의 질문에 당신은 너무 1, 어제 말했다) , 그 시점에서 다른 룩업을 시도 할 수 있습니다. success`가`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

은 1 일 뒤로 조회해도 문제가되지 않지만 너무 많은 재 등장으로 인해 여전히 SO 문제가 있습니다. – DVK

관련 문제