2012-10-31 1 views
4

Strophe.Connection.addHandler 및 Strophe.Connection.sendIQ에 대한 질문이 있습니다.Strophe.Connection.addHandler는 Strophe.Connection.sendIQ를 호출하는 경우 작동하지 않습니다.

Strophe.Connection.addHandler(context.onMessage, null, 'message') 

onMessage = function (msgXML){ 
    var to = msgXML.getAttribute('to'); 
    var from = msgXML.getAttribute('from'); 
    var fromBareJid = Strophe.getBareJidFromJid(from); 
    var type = msgXML.getAttribute('type'); 
    var elems = msgXML.getElementsByTagName('body'); 
    var body = elems[0] 
    var text = Strophe.getText(body); 
    return true; 
} 

을하지만 통화하려면 addHandler, 다시 전화하지 않을 것의 onMessage 방법,하지만 방법 후 setContactData를 호출하는 경우 sendIQ 후 호출 할 수 있습니다 onRoster :하실 수 있습니다 코드는 작동합니다.

setContactData = function(){ 
    var iq = $iq({ 
     type: 'get' 
    }).c('query', { 
     xmlns: 'jabber:iq:roster' 
    }); 
    Strophe.Connection.sendIQ(iq, context.onRoster); 
} 

onRoster = function(iq){ 
    $(iq).find('item').each(function(){ 
     var jid = $(this).attr('jid');  
     // transform jid into an id 
     var jid_id = CommonUtil.getNameFromJid(jid); 
     userList = userList + "','" + jid_id; 
    }); 

왜 onMessage를 콜백 할 수 없습니까? 근본 원인은 무엇입니까? 내가 누락 된 것?

답변

3

이 시도 :이
AddHandler에() 함수는 하나 개 이상의 매개 변수를 사용합니다 자바 스크립트와 jQuery를 책 Wrox 사 전문 XMPP 프로그래밍에서

addHandler(context.onMessage, null, 'message', 'chat')//or 'normal' 


. 첫 x 째 매개 변수는 일치하는 스 D자가 수신 될 때 이 호출되는 함수입니다. 나머지 매개 변수는 일치하는 기준입니다.
이러한 매개 변수의 전체 목록은 좌향 선회 소스 코드에서이 단축 함수 정의에 표시됩니다 : 기준 중 하나가 null 또는 정의되지 않은 경우

addHandler: function (handler, ns, name, type, id, from) { 
// implementation omitted 
} 

는 어떤 절은 일치합니다. 그렇지 않으면, 스 D자가 스 D 자의 특정 부분에서. 자열 동등성 기준을 충족시키는 경우에만 과 일치합니다.
마지막 네 가지 기준 - name, type, id 및 from - 스탠자의 요소 이름과 유형, ID 및 속성의 필터를 지정하십시오. 이 네 가지 기준은 요소의 자손이 아닌 최상위 요소에서만 확인됩니다. 첫 번째 기준 인 ns는 약간 다르며 최상위 요소를 직접 자식 인 으로 확인합니다. 곧 이유를 알 수 있습니다. 이름 기준은 모든 스 D 자 또는 메시지, 존재 여부, 또는 iq 중 하나와 일치시키기 위해 거의 항상 널입니다. addHandler() 예제는 수신 된 모든 스 D 자 에 대해 호출 될 핸들러를 설정합니다.
유형, id 및 기준이 기본 속성 인 스탠자와 일치합니다.
유형을 사용하여 일반 채팅 메시지와 그룹 채팅 메시지 을 구별하거나 IQ 결과 스탠자를 IQ 오류 스탠자와 분리 할 수 ​​있습니다. id 기준은 종종 특정 IQ-get 요청과 관련된 IQ 결과와 같은 특정 요청에 대한 응답을 으로 처리하는 데 사용됩니다.

+0

마지막 기준을 설정 한 후에 작동합니다. –