2009-06-09 3 views
8

JQuery를 배우려고하는데 - 아약스에 약간의 문제가 있습니다. 페이지의 XML 응답에서 반환 된 값으로 자바 스크립트 배열을 채우려고합니다. (? \에서 백 슬래시를 사용하지 않고) :쿼리가 성공하더라도 JQuery ajax 오류 함수가 실행됩니다.

<html> 
<head> 
<script type="text/javascript" src="jquery/jquery.js"></script> 
<script type="text/javascript" src="jquery/fiber.js"></script> 
</head> 
<body> 
<p>Ajax</p> 
<script> 
var ringType = new Array(); 

</script> 
</body> 
</html> 

fiber.js이 있습니다 :

//process things for fiber map 
jQuery(document).ready(function() { 
// do stuff when DOM is ready 

//populate and display ringType 
$.ajax({ 
    type: "GET", 
    url: "ajaxHelper.pl", 
    data: { 
     getRingTypes: "1", 
     }, 
    dataType: "xml", 
    success: function(xml) { 
     //if the query was successfull, 
     alert("Got an xml object:"+$(xml)); 
     $(xml).find("ringType").each(function(){ 
      alert("Received reply "+$(this).text()); 
      var type = $(this).html(); //save the value 
      //append to ringType array 
      ringType.push(type); 
     }); 
    }, 
    error:function (xhr, ajaxOptions, thrownError){ 
     alert(xhr.status); 
     alert(thrownError); 
    } 
}); 
for(var i=0; i<ringType.length; i++){ 
    document.write("<br>"+ringType[i]); 
} 

}); 

ajaxHelper.pl이 XML을 생성 (컨텐츠 - 같은
은 여기 내 메인 페이지 (ajax.html)입니다 텍스트를 입력/XML은) :

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <\?xml version="1.0" encoding="ISO-8859-1"\?> 
    <ringType>IA</ringType> 
    <ringType>IL</ringType> 
    <ringType>IN</ringType> 
    <ringType>IR</ringType> 
    <ringType>RT</ringType> 
문제가

, 내가 ajax.html를로드 할 때마다, 아약스 쿼리는 성공하지만, 오차 함수가 실행됩니다! xhr.status = 200 (쿼리가 ok임을 의미 함) 및 thrownException은 정의되지 않았습니다.

+0

죄송를 반환하고 있는지 확인, XML은 제대로 붙여하지 않았다. 여기 다시 (일부 공백으로)갑니다 : < ringType > IA < ringType > IL < ringType > IN < ringType > IR < ringType > RT Adrian

+0

넣어 시도 을 출력 XML 문서 상단에 추가하십시오. 브라우저 (http : //mywebapp/ajaxHelper.pl)에서 ajaxHelper.pl 파일을 여는 경우 아직 – karim79

+0

이 아닌 경우 브라우저에서 XML에서 파일 응답? –

답변

4

모든 브라우저에서 이러한 현상이 발생합니까?

1) 성공 및 오류 대신 완료을 사용하여 상태를 처리 할 수 ​​있습니다. if를 사용하여 XHR 반환 상태를 확인하고 그에 따라 분기하십시오.

http://docs.jquery.com/Ajax/jQuery.ajax#options

+0

이 문제는 모든 브라우저에서 발생합니다. 나는 성공 대신에 완전한 것을 사용하려고 노력할 것이고 당신에게 알려줄 것입니다. – Adrian

+1

완전한 함수를 추가했고 상태를 확인할 때 "parsererror"가 나타납니다. 즉, 보낸 XML이 유효하지 않다는 의미입니다. 적어도 이제 나는 파기를 계속해야할 곳을 안다. 고맙습니다! – Adrian

+0

분명히 XML은 xsd를 정의하는 것이 유효해야합니다. 내 코드는 그들 없이는 작동하지 않습니다. 이제 (필자가 빠진 정의를 만들었습니다.) 모두 예상대로 작동합니다. – Adrian

1

AJAX는 비동기입니다. $ .ajax 함수가 ajaxHelper.pl 요청을 시작한다는 것을 의미합니다. 그 동안에는 코드를 계속 실행합니다. 요청은 $ 아약스 후 다음 줄 (...)

for(var i=0; i<ringType.length; i++){... 

그래서 난 당신이 ringType이 정의되지 않도록 예외를 받고있어 가정에 도달하기 전에 반환 할 기회가 없다 ...? 그리고 그것이 오류 기능이 실행되는 이유 일 수 있습니다.

+0

충분하지만, 성공 함수 시작에서 경고를 트리거하지 않습니다 ... – Adrian

+0

오류가 발생하면 스크립트 실행이 중지됩니다. jQuery 내부에서 예외를 처리하는 방법을 살펴 보지 않았지만 for 루프를 콜백 내부로 이동해보십시오. – gregers

5

http://groups.google.com/group/jquery-en/browse_thread/thread/23679594ebe128a9를 통해 서버는 200 상태 코드가 XML 문서를 반환 할 수 있습니다. 그러나 브라우저가 문서를 구문 분석 할 수 없으면 parseerror가 발생하고 jQuery의 오류 처리기가 호출됩니다.

유효한 XML :

+0

이 문제가 있지만 JSON 결과가 있습니다. 픽스도 같았고 효과적이었습니다 : 유효한 JSON을 반환하면 브라우저가 만족스럽고 적절한 이벤트를 반환합니다. – dbarros

관련 문제