2011-08-13 7 views
1

간단히 말해, 로컬에서 제대로 실행되는 프로젝트가 있지만 일단 내 서버에 업로드하면 내 하나의 XMLHttpRequest가 비참하게 실패합니다. 로드되는 XML (이 경우 .tmx) 파일에 대한 상대 경로는 확실히 맞습니다. 이 문제를 해결하는 데 도움이 될 경우 대단히 감사하겠습니다.XMLHttpRequest는 로컬에서는 작동하지만 서버에는 없습니다.

프로젝트의 위치는 www.jorum.se/fancypants/이고 문제 코드는 game.js (22 행)입니다.

답변

3

서버의 XML 문서가 text/xml 콘텐츠 형식으로 제공되지 않으므로 XmlHttpRequest 개체가 응답을 XML로 처리하지 않으므로 responseXML 속성이 설정되지 않습니다. responseText 속성에는 XML 텍스트가 포함되어 있습니다.

올바른 콘텐츠 형식을 반환하도록 HTTP 서버를 수정하십시오.

+0

또는 서버를 수정할 수없는 경우 XMLHttpRequest 객체를 XML로 구문 분석하도록 강제로 재정의하십시오. – jfriend00

+0

mime 유형을 재정 의하여이를 수정 한 것으로 보입니다. 다음 문제에. 고맙습니다! – jlowgren

0

내가보기에 AJAX 요청을 올바르게 작성하고 있습니다. 내 계산으로 문제는이 라인은 다음과 같습니다

var xmldoc = req.responseXML; 
    var mapwidth = xmldoc.documentElement.getAttribute("width"); 

해당 xmldoc가 null의 경우, 따라서 다음과 같은 오류 던지고 : 같은 당신이 노력을 통과하는 이유에

game.js:22 
Uncaught TypeError: Cannot read property 'documentElement' of null 

나는 또한 궁금를 어쨌든 jQuery를 이미로드했을 때 직접 XMLHttpRequest 객체를 만들 수있다. 왜 jQuery.ajax을 사용하지 않는 것이 좋을까요? dataTypexml으로 포함되도록 매개 변수를 설정할 수 있습니다. HTTP 헤더를 제대로 설정하지 않아도 파싱 할 수 있습니다.

+0

기본적으로 나는 가능한 한 작은 오버 헤드를 찾고 있습니다. 나는 jQuery를 미학으로 사용하고있었습니다. 하지만 고마워, 고마워! – jlowgren

+0

일부 브라우저는 XHR을 다르게 구현한다고 생각할 때 브라우저 간 호환성뿐만 아니라 읽기 쉽고 유지 보수가 가능한 코드를 지불하는 것이 상당히 저렴한 것처럼 보입니다. – Chris

0

좋아하는 브라우저에서 자바 스크립트 오류를보고 계십니까? game.js의 22 행에 오류가 표시되는데, 이는 응답 XML이 예상 한 것이 아니므로 xmldoc이 원하는 방식으로 초기화되지 않았기 때문입니다. 디버거 (Firefox의 Chrome inspector 또는 Firebug)를 열어서 무엇이 실패했는지 직접 확인하십시오. 그것이 나 였다면 game.js 21 행에 중단 점을 설정하고 req 객체를보고 마지막 트랜잭션 (오류, 기타 데이터 등)에 대해 알려주는 내용을 확인합니다.

responseXML here on Mozilla's reference의 설명을 참조하십시오. 가능한 원인은 responseXML이며 서버는 text/xml Content-Type 헤더 또는 XML 구문 분석 오류를 적용하지 않습니다. 서버가 올바른 MIME 유형을 설정하지 않은 경우 서버가 overrideMimeType()을 사용하여 XML로 구문 분석하도록 할 수 있습니다.

+0

XMLHttpRequest open() 함수가 동기식으로 작동하기 때문에 스크립트가 대기합니다. open ("GET", "maps/testmap.tmx", false); (3rd parameter) – stewe

+0

아, OK. 동기식 아약스 호출은 사용자 친화적이지 않기 때문에 기대하지 않았습니다. 그렇다면 문제는 xmldoc이 null이라는 것입니다. 21 행에 중단 점을 설정하고 responseXML이 무엇인지 확인해야합니다. – jfriend00

+0

나도 그저 알려주고 싶었어. Btw. cdhowie의 대답이 정확하기 때문에'responseXML'이 정의되어 있지 않습니다. – stewe

관련 문제