웹 개발자로 프로그래밍 중 AJAX관련 문의

Mozilla Firefox 사용에 대한 일반적인 질문과 답을 해 주는 게시판입니다. 질문을 하기 전에 FAQ를 읽어 보시는게 도움이 될 것입니다.
Post Reply
천하귀남

웹 개발자로 프로그래밍 중 AJAX관련 문의

Post by 천하귀남 »

웹개발로 먹고사는 중생입니다.

최근 크로스 브라우징에 관한 말이 많길래 한번 해봐야겠다 싶어서 지금 도전중입니다.

그런데 AJAX관련 동작이 원활하지가 못하군요

파이어폭스 1.5를 사용중이고 파이어폭스에서 나오는 오류메세지대로 문제있는부분은 수정했습니다.

function getXmlHttp(){

var oXmlHttp = false;

if (window.XMLHttpRequest)
{
alert("XMLHttpRequest");
oXmlHttp = new XMLHttpRequest();
}else{
oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}

return oXmlHttp;
}

function setDefNodeList()
{

var sUrl;
sUrl = "./AJAX/nodeList_AJAX.asp"

var oXmlHttp;

//
oXmlHttp = getXmlHttp();

oXmlHttp.open ("Post", sUrl,true);
oXmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
oXmlHttp.onreadystatechange = function()
{
if (oXmlHttp.readystate == 1 )
{
document.getElementById("oNodeTree").innerHTML = "로딩중";
}
else if (oXmlHttp.readystate == 4 )
{

if (oXmlHttp.status == 200)
{
document.getElementById("oNodeTree").innerHTML = oXmlHttp.responseText;
}else
{
document.getElementById("oNodeTree").innerHTML = "컨텐츠 로드 실패";
alert(oXmlHttp.status + oXmlHttp.statusText);
}
}
}
oXmlHttp.send(null);
}

이런 코드를 사용했고 익스플로러에서는 동작을 잘합니다.

파이어폭스 에서도 아무런 오류가 없다고 나오는데 아무런 동작이나 오류도 안뜨는군요

그냥 단순한 자바스크립트 조작은 잘먹습니다. 헌데 AJAX의 결과값이 비어서 오는군요

일부 답변에 동기모드로 사용하라고 되있지만 DB로딩이 시간걸리는 부분이 있어서 비동기모드로 작업할부분이 많습니다.
hyeonseok
해커
해커
Posts: 691
Joined: 2004 08 11 22:14 59
Contact:

Post by hyeonseok »

viewtopic.php?t=5729

이것과 같은 문제 아닌가요? 버그라는 군요.
이름

파이어 폭스와 호환포기

Post by 이름 »

이제보니 파이어 폭스에서 AJAX방식 구동 자체가 버그가 있는듯 하군요

동기모드로는 동작을 한다고 하지만 동기모드는 응답이 올때까지 싸이트가 먹통이 되는데 쿼리가 오래걸리는경우 이게 동작중인지 오류인지 구분이 안됩니다.

더군다나 오류발생시에 대한 처리도 문제군요

어쩔수 없이 당분간 파이어폭스와의 호환은 넘어가야 할듯 하군요
eouia

Post by eouia »

조금 다른 이야기인데, 물론 나름 장단점이 있긴 하지만, 웹어플리케이션은 비동기방식으로 움직이는 것이 더 바람직하다고 봅니다. 말씀하신 것처럼 응답시간이 오래걸리거나, 서버쪽의 통신상황을 모르기 때문입니다. 지금 당장 연결이 성공해도 0.01초 후에 재시도했을 때 연결된다는 보장이 없지요.
HTTP 커넥션 자체가 단발성/비지속성 연결이기 때문에, 커넥션 자체를 장담할 수 없으며, 따라서 그 위에서 돌아가는 AJAX역시 HTTP 커넥션의 한계를 벗어날 수 없을 겁니다. 그러므로 동기화방식보다는 비동기화방식을 사용하는게 좋을 것 같습니다.

문제가 되는 것은, 이른바 serialization 부분일 텐데, 응답이 돌아온 이후에 차후 스텝을 진행시켜야 하는 경우 등이겠지요.
저라면 이런 경우, AJAX응답이 넘어올 때까지 기다리는(화면에는 "데이터 통신중입니다."라는 메시지를 보이게 한다거나...) Wait 프로세스를 만들고 그 속에 AJAX 비동기화 통신try를 합니다. 일정시간마다 응답여부를 체크하고(flag를 하나 두면 되겠죠.) 일정시간 또는 일정시도회수가 넘으면 연결을 포기하고 실패했을 경우의 처리를 하는 프로세스로 넘기고, 그 사이 응답이 오면 차후 단계를 진행시키는 프로세스로 넘기는 식으로 작성하겠습니다.

물론 이런 비동기화방식은 확실히 동기화방식보다 복잡해 보입니다만, HTTP커넥션 특성상 어쩔 수 없다고 봅니다.
eouia

Re: 파이어 폭스와 호환포기

Post by eouia »

이름 wrote:이제보니 파이어 폭스에서 AJAX방식 구동 자체가 버그가 있는듯 하군요

동기모드로는 동작을 한다고 하지만 동기모드는 응답이 올때까지 싸이트가 먹통이 되는데 쿼리가 오래걸리는경우 이게 동작중인지 오류인지 구분이 안됩니다.

더군다나 오류발생시에 대한 처리도 문제군요

어쩔수 없이 당분간 파이어폭스와의 호환은 넘어가야 할듯 하군요
그런데, 질문을 다시 봤는데요...
질문이 좀 헷갈립니다.
"비동기모드"는 FF에서 문제없이 동작하거든요... "동기모드"일 때가 FF에서 문제인 거라서.
따라서 다른 부분의 문제인 것 같습니다. responseText가 아예 안온다면 모를까, "비어서 온다"면 AJAX는 xmlHttpRequest 객체는 제대로 동작하고 있다는 뜻이거든요.
Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot], Semrush [Bot] and 2 guests