2014-09-08 3 views
0

개발중인 웹 페이지에서 일부 스트림 게이지 정보를 검색하기 위해 JSON 요청을 사용하고 있습니다. IE 호환성을 위해 XDomainRequest를 사용하고 있습니다. XDR은 페이지를 처음로드하는 동안 데이터를 성공적으로 검색하지만 후속 호출 (로드 후 페이지에서 windows.setInterval 사용)은 업데이트 된 정보를 반환하지 않습니다. 브라우저 캐시를 지우면 아무 일도 일어나지 않습니다. 페이지가 새로운 데이터를로드하는 유일한 방법은 실제로 IE를 다시 시작하고 페이지를로드하는 것입니다. 나는 무엇이 없는가 ??IE의 XDomainRequest - 첫 번째 호출에서만 "신선한"데이터

 //Now Access & Process the NWS Gage Data 
     if ($.browser.msie && window.XDomainRequest) { 
      //Internet Explorer Doesn't support JQuery's getJSON so you must use an alternative method 
      // Use Microsoft XDR 
      var xdr = new XDomainRequest(); 
      xdr.open("get", "http://waterservices.usgs.gov/nwis/iv/?format=json&sites=12150800,12167000,12161000,12150400,12138160,12134500,12186000,12155300,12155500&parameterCd=00065"); 
      xdr.onload = function() { 
      //parse response as JSON 
      var JSON = $.parseJSON(xdr.responseText); 
      if (JSON == null || typeof (JSON) == 'undefined') 
      { 
       JSON = $.parseJSON(data.firstChild.textContent); 
      } 
       array.forEach(JSON.value.timeSeries, function(curGage, i){ 
       curGageID = curGage.sourceInfo.siteCode[0].value; 
       curGageName = curGage.sourceInfo.siteName; 
       curGageHeight = curGage.values[0].value[0].value; 
       curGageObs = curGage.values[0].value[0].dateTime; 
       //Another Internet Explorer quirk. Date format must be changed due to IE's different interpretation 
       curGageObs = curGageObs.replace(/\-/g,"/"); 
       curGageObs = curGageObs.replace(/T/g," "); 
       curGageObs = curGageObs.substring(0,curGageObs.length-10); 
       var theDate = new Date(curGageObs); 

       document.getElementById('u' + curGageID + 'Height').innerHTML = curGageHeight + " Feet"; 
       document.getElementById('u' + curGageID + 'Date').innerHTML = theDate.toString('M/d/yyyy @ h:mm tt'); 
       assignNwsStageColor(curGageID, curGageHeight);      
       }); 
      }; 
      xdr.send(); 
     } else {   
      $.getJSON("http://waterservices.usgs.gov/nwis/iv/?format=json&sites=12150800,12167000,12161000,12150400,12138160,12134500,12186000,12155300,12155500&parameterCd=00065", function(data) {     
        array.forEach(data.value.timeSeries, function(curGage, i){ 
        curGageID = curGage.sourceInfo.siteCode[0].value; 
        curGageName = curGage.sourceInfo.siteName; 
        curGageHeight = curGage.values[0].value[0].value; 
        curGageObs = curGage.values[0].value[0].dateTime; 
        var theDate = new Date(curGageObs); 

        document.getElementById('u' + curGageID + 'Height').innerHTML = curGageHeight + " Feet"; 
        document.getElementById('u' + curGageID + 'Date').innerHTML = theDate.toString('M/d/yyyy @ h:mm tt'); 
        assignNwsStageColor(curGageID, curGageHeight);      
        });     

      }); 
     } 

감사 :

여기 내 XDR 코드입니다! Steve

답변

1

ajax 호출에서 캐시 된 정보를 확보하지 않으려면 URL에 타임 스탬프를 추가 할 수 있습니다. 예를 들어

:이 경우에, 당신이 제안하는 것을 시도했지만

$.getJSON("http://example.com?param1=asdf&_=" + new Date().getTime()); 
+0

, 그것은 XDR 요청이 "알 수없는 키워드"오류없이 반환 데이터를 반환합니다. Chrome과 Firefox (JQuery JSON 요청 옵션 사용)에서는 문제가되지 않습니다. – Scole

+1

좋습니다. 이것은 웹 서비스의 문제입니다. 일반적으로 타임 스탬프는 문제가되어서는 안됩니다. 내가 너를 도울 수 없다니 유감이다. 아마 유일한 해결책은 실제 웹 서비스에 요청을 전달하는 프록시 서비스를 만드는 것입니다. 프록시 서비스에 대한 요청에서 timestamp 매개 변수를 전달할 수 있습니다. 또한 도메인 간 아약스 요청을 더 이상 사용할 필요가 없기 때문에 IE에 대한 해결 방법을 사용할 필요가 없습니다. – PSanetra

+0

나는 몇 가지 후속 작업을 수행하여 정확한 원래 답변을 표시했습니다. USGS 서버가 제안한 추가 기능 매개 변수를 허용하지 않지만 시작 시간에 유효한 매개 변수가 있습니다. Epoch에서 현재 날짜/시간을 가져 와서 3 시간을 빼고 시작 날짜/시간으로 전달했습니다. 이제 내 URL은 항상 고유하므로 IE에서 캐시되지 않은 정보를 반환합니다. 다시 한 번 감사드립니다! – Scole

관련 문제