2012-06-07 2 views
0

웹 서비스에서 XML을 반환하기 위해 jQuery $ .ajax 호출을 사용하려고합니다. 어떤 이유로 든이 웹 서비스에 대한 호출이 실패하면 사용할 정적 XML이 있습니다. 호출이 실패했는지 여부를 알기 위해 timeout 속성을 사용하려고 노력 중이며 xml 구문 분석 논리를 오류 함수에 넣으려고합니다. 나는 ajax 호출을 제거한 상태에서 테스트했기 때문에 xml 구문 분석이 제대로 작동한다는 것을 알고있다. 실수로 ajax 호출을 추가하여 오류를 발생 시키면 $ xml var는 결코 설정되지 않습니다. 이견있는 사람?정적 폴백 값을 사용하여 webservice에서 XML 가져 오기

var navXml = '<?xml version="1.0" encoding="utf-8" ?><book><chapter id="1"></book>'; //static xml here 
var serviceUrl = 'http://1234lkjasdf/test'; //bad service url to test failure 
var $xml; 

$.ajax({ 
type: 'GET', 
dataType: 'xml', 
url: serviceUrl, 
timeout: 10, 
success: function(data, status){ 
    //set $xml var to xml data returned 
    $xml = data; 
}, 
error: function (req, status, error){ 
    //set $xml var to xml parsed from static value 
    xmlDoc = $.parseXML(navXml), 
     $xml = $(xmlDoc); 
} 
}); 
+0

문제가 발생했습니다. $ xml 변수를 설정하기 위해 시간 초과를 기다리는 동안 내 ajax 호출이 비동기 적으로 수행되고 나머지 코드는 실행 중입니다. 나머지 코드는 $ xml 변수가 여전히 null 인 동안 실행되었습니다. 방금 내 ajax 호출에 async 속성을 추가하고이를 수정하기 위해 false로 설정했습니다. 좀 더 연구를 해보았지만 Ajax의 비동기 특성을 모범 사례로 삼지 않고 $ .wait() 메서드를 사용해야하는 것처럼 보입니다. – str8killinit

답변

1

편집

이 실패 자동으로 $ 아약스 오류 처리기에서 오류처럼 보인다. XML에 오류가 있습니다. 챕터 태그가 닫히지 않았습니다. 다음과 같아야합니다.

<chapter id="1" /> 

XML에서 오류를 해결하면 작동합니다. http://jsfiddle.net/Pzdv5/1/


귀하의 오류 처리기는 다음과 같이해야합니다 : 여기에 대한 바이올린의

//set $xml var to xml parsed from static value 
var xmlDoc = $.parseXML(navXml); 
$xml = $(xmlDoc); 

당신은 (글로벌 변수를 생성합니다) xmlDoc 앞에 VAR 누락, 그리고 더 중요한 것은, xmlDoc 선언 뒤에 세미콜론 (;) 대신 쉼표 (,)가 있음을 의미합니다.

+0

그 중 하나는 나를 위해 작동하지 않았다. 사실, 오류 처리기 외부의 원래 논리를 테스트하고 잘 작동합니다 (xmlDoc 및 첫 번째 줄 뒤에 쉼표를 선언하지 않음). – str8killinit

+0

오류 처리기에 도착하는지 여부도 테스트 했습니까? console.log (오류) 또는 무엇인가? –

+0

예, 오류 처리기에 경고를 추가했는데 오류가 발생합니다. – str8killinit

관련 문제