2009-06-10 5 views
20

먼저 페이지를 설정하는 가장 이상적인 방법은 아니지만 스크립트를 1 개의 파일로 배포해야합니다.Firefox 오류 '요소를 찾을 수 없습니다.'

자바 스크립트가있는 xhtml 문서 상단에 PHP 스크립트가 있으며 특정 조건에서 XHR을 사용하여 페이지 자체에 쿼리 문자열을 보냅니다. 그런 다음 상단의 php가 활성화되어 전달 된 내용을 세션으로 저장 한 다음 자체적으로 종료합니다 (exit()). XHR은 비동기이며 내용을 반환하는지 확인하지 않습니다.

그러나 Firefox 3에서는 XHR 요청이 전송 될 때마다 오류 콘솔에서 오류 no element found이 발생합니다. 또한 exit('Done')과 같은 이탈을 사용하면 Firefox는 표시되는 DOM에 삽입하는 것처럼 (완료) 구문 오류를 발생시킵니다. 이것은 Opera에서 발생하지 않는 것 같습니다.

이미 생성 된 xhtml 페이지에서 세션을 저장하는 더 좋은 방법이 있습니까? 분명히 다른 페이지로 XHR 할 수 있지만, 나는 그것을 하나의 스크립트에 모두 보관하는 것을 선호합니다. Firefox는 XHR 요청을 DOM에 대한 업데이트로 자체 처리합니까? 나는 그것이 왜이 오류를 보내고 있는지 모른다. XHR 요청이 때


업데이트 내가 말했듯이, 파이어 폭스는 오류를 슬로우하는. 이 페이지는 유효한 XHTML이며 페이지 자체에 대한 XHR 요청이없는 한 오류없이 완벽하게 작동합니다.

정말 아무것도 반환하지 않기 때문에 오류를 보내는 이유가 궁금합니다.

다음은 객체에서 ajax 요청을하는 javascript 스 니펫입니다. 콜백 함수없이 XHR 개체를 만들고 정보를 게시합니다. 같은 페이지를 참조하지 않을 때 제대로 작동합니다.

var saveState = { saveContent: function(updateActiveMenu) { 
    var sendState = new ajaxObject(gV.url); 
    if (!updateActiveMenu) { 
     var storageContainer = document.getElementById("StorageContainer").innerHTML; 
     var menu = document.getElementById("Nav").innerHTML; 
     sendState.update("Containerstring="+urlencode(storageContainer)+"&Nav="+urlencode(menu)+"&Active="+gV.activeMenuItem, 'POST', true); } }, } 

그리고 PHP는이

if (isset($_REQUEST['Containerstring']) && isset($_REQUEST['Nav']) && isset($_REQUEST['Active'])) { 
    $_SESSION['Containerarray'] = (saveContainer(regulateEscapes(urldecode($_REQUEST['Containerstring'])))); 
    $_SESSION['Navarray'] = (saveNav(regulateEscapes(urldecode($_REQUEST['Nav'])))); 
    $_SESSION['Active'] = $_REQUEST['Active']; 
    exit('Done'); 
} 

나는 또한 내가 innerHTML을를 사용하지 않아야 알고 있어요 않습니다하지만 그건 또 다른 이야기


오류이

Error: no element found 
Source File: http://localhost/ajax.php?1244648094055 
Line: 1 
입니다입니다

오류가 발생하는 동안 p hp page 사용하지 않는 쿼리 문자열을 참조합니다.

+0

설명하는 내용에 약간의 모순이 있습니다. xhr이 반환 된 값 ('완료')을 사용하지 않으면 DOM에 삽입 할 수 없으므로 지금 할 수 있습니까? – SilentGhost

+0

코드의 작은 예를 게시하는 것이 좋습니다. – SilentGhost

+0

페이지 소스의 관련 부분을 왜 올려 놓지 않습니까? –

답변

25

Firefox는 XML로 다시 구문 분석 할 수있는 항목을 얻으려고하고 있으며 빈 응답을 받으면 XML 구문 분석 오류가 발생합니다.

당신의 PHP 통화 "출구()",

header('Content-Type: text/plain'); 

를 사용하여 파이어 폭스가 XML로 응답을 구문 분석을 시도하지 않습니다, 그리고 오류가 없어야하기 전에.

+0

"HTTP/1.0 200"헤더를 사용하고 이것이 똑같이한다고 가정하면 마음에 듭니다. 오해);)이 덕분에 많은 일을했습니다. –

+0

제 경우에는 서버에서 빈 응답을 돌려 보내고 jQuery는 xml을 예상하고 그것을 파싱하려고합니다. 나는 단순히 '성공'을 돌려 주었고 문제가 해결되었습니다. 그래서 당신도 나를 도왔습니다. 감사합니다 – sidonaldson

-2

Firefox가 유효한 HTTP 응답을 보내야합니다. Firefox는 아무 것도하지 않아도 읽으려고하기 때문에. 적어도 유효한 헤더를 반환하십시오.

header("HTTP/1.0 200"); 
exit(); 
+1

이 솔루션은 작동하지 않았지만 'Content-Type'헤더가 작동했습니다. –

관련 문제