2014-06-09 3 views
1

죄송합니다. 이전에 질문을 받았다면 비슷한 질문을 모두 읽었습니다.getElementsByTagName 가끔 undefined로 반환되는 경우

getElementsByTagName에 문제가 있습니다. iFrame이있는 웹 페이지가 있으며, iFrame은 기본적으로 API를 호출하기 때문에 현재 사용자의 이름을 반환해야합니다. 여기에 코드의 관련 비트는 다음과 같습니다

function apicallback(xml_request) { 
    if (xml_request.readyState == 4 && xml_request.status == 200) { 
     var xmldoc = xml_request.responseXML; 
     if (xmldoc.getElementsByTagName('s:Fault').length > 0) { 
      alert(xmldoc.getElementsByTagName('s:Reason')[0].childNodes[0].textContent); 
     } 
     else if (xmldoc.getElementsByTagName('GetUserDetailsByUserIdResponse').length > 0) { 
      //process data 
      document.getElementById('results').innerHTML = xmldoc.getElementsByTagName('b:FullName')[0].textContent; 
     } 
    } 
} 

또한, 여기에 해당 xmldoc에가는 XML 응답입니다 - 데이터 자체가 제거되지만 모든 태그는 특히 그 (것)들에있는 데이터가 NULL이 아닌.

파이어 폭스와 IE에서
> <GetUserDetailsByUserIdResponse xmlns="http://tempuri.org/"> 
>  <GetUserDetailsByUserIdResult xmlns:b="http://schemas.datacontract.org/2004/07/ErrisWebApi.Model" 
> xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
>   <b:BirthDate></b:BirthDate> 
>   <b:CommPrefID i:nil="true"/> 
>   <b:FirstName></b:FirstName> 
>   <b:FullName></b:FullName> 
>   <b:GenderID></b:GenderID> 
>   <b:LastName></b:LastName> 
>   <b:LegalForename></b:LegalForename> 
>   <b:LegalSurname></b:LegalSurname> 
>   <b:MiddleNames i:nil="true"/> 
>   <b:NameSuffix i:nil="true"/> 
>   <b:PersonID></b:PersonID> 
>   <b:PersonName></b:PersonName> 
>   <b:PostalTitleID i:nil="true"/> 
>   <b:PrefSurnameFirst i:nil="true"/> 
>   <b:SimpleGenderID i:nil="true"/> 
>   <b:SurnameFirst i:nil="true"/> 
>   <b:TitleID></b:TitleID> 
>  </GetUserDetailsByUserIdResult> 
> </GetUserDetailsByUserIdResponse> 

이, 크롬에서 그러나 나는 오류가 "속성 '는 TextContent을'정의의 읽을 수 없습니다"완벽하게 정상적으로 얻을 작품 - 그래서 xmldoc.getElementsByTagName('b:FullName')[0].textContent; 문제지만 내 인생 내가 할 수 없습니다 왜 그렇게 될지 생각해보십시오.

API 응답을 HTML 페이지로 저장하고 Chrome의 콘솔을 사용하여 정확한 코드 줄을 실행 했으므로 내가 예상 한 결과를 얻었으므로 때로는 실패하지 않는 이유는 알 수 없습니다.

도와주세요.

+0

"GetUserDetailsByUserIdResponse"태그가 있습니까? – nicael

+0

당신도 xml을 공유해야합니다. – yogi

+0

죄송합니다 @yogi, 나는 그것을 지금 붙였습니다, 전에 잊어 버렸습니다. @nicael, 예 GetUserDetailsByUserIdResponse는 태그이지만 GetuserDetails가 아닌 getElementsByTagName ('b : FullName')에 대한 불만이 있습니다. –

답변

1

태그 이름을 기준으로 요소 값을 가져 오려면이 방법을 사용하십시오. 비슷한 문제가있어서 javascript 함수 getElementsByTagName이 사용되는 브라우저에 따라 다른 동작을한다는 것을 알게되었습니다. 이것은 다른 프로젝트에서 사용하고 모든 주요 브라우저에서 작동하는 해결 방법입니다.

test = item.getElementsByTagName('b:FullName')[0]; 
if(!test || test == null){ 
    test = item.getElementsByTagName('FullName')[0]; 
} 
if(!test || test == null){ 
    test = item.getElementsByTagNameNS('namespaceurl', 'FullName')[0]; 
} 
return test 
+0

답변을 업데이트했습니다 .. 설명이 필요하면 알려주세요 ... – faby

+0

이것은 저에게 효과적입니다. 감사합니다. –

+0

도와 드리겠습니다. – faby