아...꼬박 이틀동안 삽질했다 -_-;;;;
jQuery를 배워보고자 어제부터 즐겨하는 게임을 위해(WOW) PostgresSQL+PHP+jQuery로 간단한 프로그래밍을 시작하였다.

암튼!
jQuery로 AJAX와 XML 처리가 간단하다고 하여...요즘 트랜드라고도 하고...해서...
jQuery로 해당 부분을 시험삼아 개발하고 있는 중...
Iron(≒크롬)과 Firefox에서는 정상동작 하지만 IE(익스플로러)에서는 동작하지 않는 것을 발견하였다.

먼저 처리할 XML 문서는 다음과 같다.
<?xml version="1.0" encoding="UTF-8" ?><Users>
    <user id="1" userid="test2" name="체리" time_stamp="1259052018" />
    <user id="2" userid="test" name="테스트" time_stamp="1259052020" />
</Users>

이렇게 문서가 정상적으로 처리되는 것을 확인하였고 각 브라우저에서도 제대로 읽히는 것을 확인하였다.
하지만...다음의 자바스크립트 코드로 읽어보니...IE에서만 동작하지 않는 것이다.
$.ajax({
	type: "GET",
	url: "<?=$wow['path']?>/ajax/userlist.php",
	dayaType:"xml",
	success: processXML});

function processXML(xml){
	var i = 0;
	$(xml).find('user').each(function() {
		$("#userTable").append("<tr id=\"userTableRow_"+(i)+"\">"
		+"<td><a href=\"javascript:deleteRow('userTableRow_"+(i++)+"');\">삭제</a></td>"		+"<td>"+$(this).attr("userid")+"</td>"
		+"<td>"+$(this).attr("name")+"</td>"
		+"<td>"+$(this).attr("time_stamp")+"</td>"
		+"</tr>");
	});
	displayFootCaption('userTableFoot', $("#userTable tbody tr").length);}

이것저것 하다 알아보니 $(xml).find("user")에서 find() 함수가 동작하지 않는 것을 확인하였다..
왜 그럴까..왜 그럴까...무지하게 고민하고 책도 보고 인터넷도 찾아보고 하는 도중..
아래의 블로그를 찾아내었다.
결론을 말하면..
IE에서 해더 없이는 XML로 제대로 인식이 안 된다는 것이었다.
왜!!!!!!!!!! 왜!!!!!!! 그냥 문서를 직접 URL 타이핑 해서 읽을 땐 XML로 잘 인식을 했냔 말이다 ㅠㅠ

위의 블로그에 해결 방안들을 제시하고 있지만, XML 문서를 생성하는 소스를 수정하는 것이 제일 정직하고 확실한 방법인 것 같다.
아래와 같이 해더를 추가해 주면 된다.
PHP로 개발하고 있는 것이기에 아래와 같이...
header('content-type:application/xml; charset=utf-8');

PHP가 아니라 다른 언어로 개발 중이라면 위의 내용과 맞게 수정해 주면 된다.
단, 지금 개발 하는 것이 UTF-8로 개발하고 있기에 위의 코드가 나오는데..
euc_kr이나 다른 언어로 개발 중이라고 하면 해당 언어 코드로 변경을 해 주어야 하는 것은 당연!!

감사합니다. LazyGyu님! ^^
  1. Favicon of http://lazygyu.tistory.com BlogIcon LazyGyu 2009.11.25 20:10 신고

    제 포스팅이 도움이 되셨다니 제가 더 기쁘네요 ㅠㅠ

    • Favicon of http://www.specialguy.net BlogIcon 체리 2009.11.26 23:32 신고

      감사합니다. 덕분에 앓는이 뺀 기분이예요 ㅎㅎ

  2. ㅁㄴ 2011.04.03 04:37 신고

    헤더를 바꾸는것도 그렇고 링크 가서도 원하는 답을 얻었네요..감사합니다..

    • Favicon of http://www.specialguy.net BlogIcon 체리 2011.04.14 21:06 신고

      저도 해당 링크에서 많은 도움 받았습니다.
      감사합니다 ^^

  3. 베리굿 2012.07.07 23:27 신고

    큰 도움이 될 것 같습니다.

    해결된다면 많은 시간을 아낄수 있을것 같네요 ^^

홈페이지에서 옮김. (2007.06.18~2007.06.26 작성)

  • php에서 클래스
  • php에서 엑셀 읽기
  • 서버에서 zip파일 압축 해제
    •  php 5.2 이후 버전에
      <?
      $zip = new ZipArchive;    // zip 파일 객체를 생성합니다
      if($zip->open("HtmlParse.zip")) { // zip 파일을 열고
          echo "압축을 해제합니다<br>";
          $zip->extractTo("./test");  // 압출 풀을 경로를 현재 디렉토리의 test라고 지정(test 디렉토리가 없으면 생성)
          $zip->close();     // zip 파일을 닫습니다
      }
      ?>


  • php에서 엑셀 파일로 출력
    • 기본 틀은 테이블로 작성
    •  header("Content-Type: application/vnd.ms-excel");
      header("Content-Disposition: attachment; filename=파일명");




홈페이지에서 옮김. (2007.10.09 작성)

아래 게시물과 같이 먼저 import 할 것들
java.util.Scanner
java.lang.Runtime
java.lang.Exception
java.io.BufferedReader
java.io.InputStreamReader

try
{
    Process process = Runtime.getRuntime().exec("df -h");
    BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
    Scanner scanner = new Scanner(br);
    scanner.useDelimiter(System.getProperty("line.separator"));
    while(scanner.hasNext())
        out.println(scanner.next());
    scanner.close();
    br.close();
} catch(Exception e) {
    e.printStackTrace();
}

Process 클래스를 이용하여 시스템 명령어를 실행한다.
Runtime.getRuntime().exec("명령어")는 시스템 명령어를 수행하라는 코드이다.
이 코드는 실행 결과를 Process 객체로 리턴한다.
이 Process 객체는 InputStreamReader와 BufferedReader, Scanner를 이용하여 String으로 변환 가능하다.
Scanner scanner = new Scanner(br); 이하 부분은 아래 게시물과 같은 형태이다.

  1. Favicon of http://hello2world.tistory.com BlogIcon 안녕 하세요 2015.08.06 13:51 신고

    정말 감사합니다 ~~~

홈페이지에서 내용을 옮김. (2007.10.09 작성)

먼저 import 할 것들
java.io.File,java.io.FileNotFoundException,java.util.Scanner

아래는 코드
String file = "/proc/version";
try
{
    Scanner scanner = new Scanner(new File(file));
    scanner.useDelimiter(System.getProperty("line.separator"));
    while(scanner.hasNext())
        System.out.println(scanner.next());
    scanner.close();
} catch(FileNotFoundException e) {
    e.printStackTrace();
}

Scanner 클래스를 사용하여 파일을 읽는다.
scanner.useDelimiter(System.getProperty("line.separator")) 이 부분이 파일을 어떻게 읽을 것인지를 결정하는 부분이다.
line.separator를 지정하였기에 한줄씩 읽는다.
scanner.hasNext()를 호출하여 다음 줄이 있는지 판단하고 있으면 scanner.next()로 한 줄을 string으로 리턴한다.
Java x64 버전이 존재한다.
에서 JDK 다운로드 페이지로 가 보면 x64 버전이 존재한다.
호기심에 한번 깔아 보았다.

현재 사용 OS : Windows 7 Professional x64
설치 JDK : Java SE 1.6 update 16 x64 버전 (설치는 당연히 Program Files에 설치가 된다. Program Files (x86)에 설치되는 x86 버전이 아님)

이렇게 설치를 끝마친 후 기존에 사용하던 이클립스를 실행해 보니 동작이 되지 않았다.
외국 사이트를 구글링한 결과..
위의 내용에서 찾을 수 있었다.

기본적으로 Eclipse 다운로드 페이지에는 표시되는 윈도용 Eclipse 버전의 경우 x86 버전이다.
이 파일을 다운로드 받아 실행을 하면 JDK를 찾을 수 없다는 메시지를 볼 수 있다.

따라서 Eclipse도 x64용을 받아 설치해야 한다.
위 페이지에서 가장 최신버전인 3.5.1 버전을 클릭해 보면 (물론 3.6 버전도 존재하지만 정식 버전은 아님)...
여러가지 버전의 Eclipse가 존재한다는 것을 볼 수 있다.
그 중
Windows (x86_64) (Supported Versions)
(http)  
163 MB eclipse-SDK-3.5.1-win32-x86_64.zip (md5) (sha1)
이 것이 x64용 Eclipse이다.

이 것을 다운로드 받아 압축을 풀고 사용하면 된다.
설정따윈 필요 없다. 그냥 기존 x86용 윈도에서 사용하던 것 처럼 쓰면 된다.

참고로 카이스트의 미러에서 다운로드 받도록 되어 있는데..
이 것의 다운로드 속도가 느린경우 하단에 있는 다른 링크를 이용하면 좀 더 빠른 속도로 다운로드 가능하다.
필자는 아마존 링크에서 다운로드 하였다.
속도가 엄청 빠름 +_+

+ Recent posts