2017-04-21 15 views
1

Strophe 라이브러리를 사용하여 사용자의 명부를 요청하기 위해 IQ 스탠자를 보내려고합니다. Strophe는이 기능을 sendIQ이라고합니다.Strophe로 XMPP IQ 스탠자를 보내려고합니다

let iq_str = "<iq type='get' id='roster1'><query xmlns='jabber:iq:roster'/></iq>"; 
let parser = new DOMParser(); 
let iq = parser.parseFromString(iq_str, "text/xml"); 
XMPP.conn.sendIQ(iq, onRoster); 

그러나, TypeError: e.getAttribute is not a function 오류와 var id = elem.getAttribute('id'); 라인 좌향 선회의 sendIQ 기능 충돌, (내가 제대로 이해한다면) 때문에, iq는 XML 요소되지 않습니다 :

나는이 같은 IQ의 연을 보내려고 객체이지만 XML 문서 객체입니다.

약간의 검색 후, 나는이 대신 수행하여 충돌을 피할 수 있었다 :

let iq_str = "<iq type='get' id='roster1'><query xmlns='jabber:iq:roster'/></iq>"; 
let parser = new DOMParser(); 
let iq = parser.parseFromString(iq_str, "text/xml").getElementsByTagName("iq")[0]; 
XMPP.conn.sendIQ(iq, onRoster); 

을하지만이 iq 통과에 쿼리를 지정 아니에요 이후 분명히 어떤 응답을받을 수없는 경우이 방법 변하기 쉬운.

나는 아주 사소한 것을 놓치고 있어야한다는 느낌이 들지만 나는 잠시 붙어있다. 모든 예제에서 jQuery를 사용했지만 사용하지 않고도 솔루션이 있어야한다고 생각합니다.

+0

내 나쁜,'getElementsByTagName'는 IQ가 정확했다, 그래서 자식 요소를 반환한다. 문제는 콜백'onRoster'에 오류가있어서 통지하지 못했습니다. –

답변

1

Strophe 자신의 Strophe.Builder 생성자를 사용하여 브라우저의 DOMParser API가 아닌 XML 스탠자를 생성해야합니다.

대신 직접 Strophe.Builder를 호출, 당신은 유틸리티 기능을 Strophe.$msg (대한 "메시지"연), Strophe.$pres (대한 "존재"연) 및 Strophe.$iq (대한 "IQ"연)를 사용하여이 작업을 수행 할 수 있습니다.

자식 요소는 c 메서드와 텍스트를 통해 t 메서드를 통해 추가됩니다. 예를 들어

:

$msg({'to': '[email protected]'}).c('body').t('Hello world!); 

이러한 기능 및 방법은 상기 생성 Strophe.Builder 오브젝트를 반환한다. 따라서 자식을 추가하는 데 c을 사용한 경우 해당 자식을 반환합니다. 부모에게 다른 자식을 추가하려면 up을 사용하여 컨텍스트를 부모로 다시 이동하십시오. 예를 들어

:

$msg({'to': '[email protected]'}).c('child1').up().c('child2'); 

이 다른 XML 스탠자를 생성하는 데 사용할 수있는 $의 MSG에 의해 호출되는보다 일반적인 낮은 수준 $build 기능, $ 대가와 $ IQ와도, 그러나 그것의 매우 드물게 필요합니다.

그래서 작성하고 특정 IQ의 연을 보내, 당신은 같은 것을 할 것 :

let iq = $iq({'type':'get', 'id':'roster1'}).c('query', {'xmlns':'jabber:iq:roster'}); 
XMPP.conn.sendIQ(iq, onRoster); 
+0

답변과 설명에 감사드립니다. 나는 실제로 그것을 이미 시도했지만 (발견 한 첫 번째 예제), _ $ iq를 얻는 것이 정의되지 않았습니다. 오류가 발생했습니다. 결국 실패한 이유는 실제로 jQuery이기 때문이라고 생각했지만 지금은 잘못된 것입니다. 그래도 같은 오류가 계속 발생합니다. –

+0

Nevermind, 나는 strophe 임포트에 $ iq를 추가했다. –

+0

그런 다음 대답을 수락하십시오. –