2012-08-22 3 views
0

간단한 파일 업로드 페이지를 만들었습니다. 정말 간단하게하기 위해 iFrames를 사용하여 파일 입력을 포함하지 않았습니다. 따라서 파일 제출은 양식이 제출되어 페이지 재로드를 트리거합니다. 이것은 페이지에 업로드 된 파일 이름을 표시하는 데 필요합니다. 파일 이름은 jQuery에서 AJAX 호출을 통해 가져옵니다.IE9는 파일 업로드 후 ajax 메서드를 호출하지 않습니다.

다 (I 리눅스 시험하지 않았다 그러나 나는 너무 작동 추측) Mac과 Windows에서 크롬, 파이어 폭스, 오페라, 사파리의 매력처럼 작동

내 문제는 IE9, 내가 브라우저를 열 때이다 , ajax 호출이 이루어지고 데이터가 표시됩니다. 그러나 일단 파일이 업로드되면 작업이 중단됩니다.

서버가 디버그 모드로 시작되었으며 서비스 메소드에 중단 점을 설정했습니다. 중단 점은 파일이 업로드되지 않은 한 도달됩니다.

파일이 업로드되면 (즉, 작동 함) 더 이상 중단 점에 도달하지 않습니다. IE9는 서비스 메소드를 호출하지 않으며 데이터는 더 이상 변하지 않습니다. 다른 페이지 (google.com)로 이동하고 URL을 작성하여 페이지를 다시로드해도 도움이되지 않습니다.

이것은 브라우저에서 지금까지 본 이상한 동작입니다. 양식이 제출되고 파일이 보내지지만 후속 아약스 호출이 수행되지 않고 페이지가 변경되지 않습니다. 그러나 자바 스크립트는 AJAX 호출이 만들어진 것처럼 동작합니다. 서버가 더 이상 관여하지 않는다는 것입니다.

<form method="post" action="${pageContext.request.contextPath}/services/prepop/upload/csv" 
      id="fileUploadForm" enctype="multipart/form-data"> 
     <div class="file-upload"> 
      <input id="uploadedFile" 
        type="file" 
        name="uploadedFile" 
        onchange="submit()"/> 
     </div> 
     <input type="hidden" name="formId" value='{{formId}}'/> 
     <input type="hidden" name="contentId" value='{{id}}'/> 
     <input type="hidden" name="page" value='upload'/> 
    </form> 

이 AJAX 호출

app.log("getting the form files"); 
    $.ajax({ 
     url:"${pageContext.request.contextPath}/services/jsonrest/prepop/list", 
     type:"GET", 
     async:true, 
     data:[ 
     {name:"formId", value:formId} 
     ], 
     success:function (prepopContentList) { 
     app.log("the content file list was fetched with " + prepopContentList.length + " entries"); 
     upload.populateEntryList(prepopContentList, $("#fileUploadList")); 
     } 
    }); 

이상한 일이 로그 항목이 로그에 있지만 항상 같은 값으로 나타나는입니다 :

는 형태입니다. 디버그 모드에서 내용을 보면이를 확인할 수 있습니다. 배열은 항상 동일합니다.

사용할 수있는 혜성이 없습니다. 그것은 일반 jQuery 응용 프로그램입니다.

단서가있는 사람.

답변

0

IE9가 캐싱에 대해 현명하려고하고 명시 적으로 만료되도록 설정되지 않은 모든 것을 캐시하는 것처럼 보입니다.

나를위한 해결책은 도착시 만료되도록 응답 (저지 사용)을 변경하는 것이 었습니다. 그게 어떻게 작동하는지.

정상 응답 :

return Response.ok(jsForms.toJSONString(), MediaType.APPLICATION_JSON_TYPE).build(); 

만료 응답 :

return Response.ok(jsForms.toJSONString(), MediaType.APPLICATION_JSON_TYPE).expires(new Date(1000)).build(); 

통지 속임수를 썼는지 expires(new Date(1000))

의 추가.

관련 문제