2013-08-12 1 views
0

У меня есть функция AJAX, которая вызывается в body onLoad. Этот AJAX вызывает XML-файл.текст «undefined» в начале результата ajax

Вот мои коды.

AJAX:

function loadXml(b,c) 
{ 
var xmlhttp; 
var txt,x,xx,i; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    x=xmlhttp.responseXML.documentElement.getElementsByTagName("POST"); 
    for (i=0;i<x.length;i++) 
     { 
     xx=x[i].getElementsByTagName("TITLE"); 
     { 
     try 
      { 
      txt=txt + "<span class='nphead'>" + xx[0].firstChild.nodeValue + "</span><div class='divider'><div class='divtop'></div><div class='divbot'></div></div>"; 
      } 
     catch (er) 
      { 
      txt=txt + "<span class='nphead'> </span><div class='divider'><div class='divtop'></div><div class='divbot'></div></div>"; 
      } 
     } 
     xx=x[i].getElementsByTagName("CONTENT"); 
     { 
     try 
      { 
      txt=txt + "<p class='pcontent'>" + xx[0].firstChild.nodeValue + "</p>"; 
      } 
     catch (er) 
      { 
      txt=txt + "<p> </p><div class='divider'><div class='divtop'></div><div class='divbot'></div></div>"; 
      } 
     } 
     } 
    document.getElementById(c).innerHTML=txt; 
    } 
    } 
xmlhttp.open("GET",b,true); 
xmlhttp.send(); 
} 

ТЕЛО:

<body onLoad="loadXml('/content/blog/content.xml','posts')"> 
<div class="wrap"> 
    <br><br><br><br><br><br><br> 
    <div class="content g_c" id="posts"> 
    </div> 
</div> 

//some more stuffs. some stuffs deleted 
</body> 

И content.xml:

<?xml version="1.0" encoding="utf-8"?> 
<BLOG> 
    <POST> 
     <TITLE>Title!</TITLE> 
     <CONTENT> 
     content 
     </CONTENT> 
</POST> 
</BLOG> 

Результаты хорошо, но проблема является результатом будет: (в смелые слова, что я только ожидается, будет показан)

неопределенными Название!

содержание

Почему слово "не определено" в самом начале? Как я могу избавиться от него? Я не могу понять, что вызывает его. Кстати, заблаговременно за помощь.

ответ

1

, потому что, когда первая петля выполняется txt не определен, то лучше установить txt = '' перед началом цикла, так что несколько вызовов к loadXml будет работать безопасно

xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    x=xmlhttp.responseXML.documentElement.getElementsByTagName("POST"); 
    var txt = ''; // create txt as a local variable than a global one since it is used only inside the onreadystatechange method 
    for (i=0;i<x.length;i++) 
     { 
     xx=x[i].getElementsByTagName("TITLE"); 
     { 
     try 
      { 
      txt=txt + "<span class='nphead'>" + xx[0].firstChild.nodeValue + "</span><div class='divider'><div class='divtop'></div><div class='divbot'></div></div>"; 
      } 
     catch (er) 
      { 
      txt=txt + "<span class='nphead'> </span><div class='divider'><div class='divtop'></div><div class='divbot'></div></div>"; 
      } 
     } 
     xx=x[i].getElementsByTagName("CONTENT"); 
     { 
     try 
      { 
      txt=txt + "<p class='pcontent'>" + xx[0].firstChild.nodeValue + "</p>"; 
      } 
     catch (er) 
      { 
      txt=txt + "<p> </p><div class='divider'><div class='divtop'></div><div class='divbot'></div></div>"; 
      } 
     } 
     } 
    document.getElementById(c).innerHTML=txt; 
    } 
    } 
2

Вы никогда не инициализировали txt, прежде чем объединить результат на нем, таким образом txt === undefined перед любым конкатенацией.

Вместо этого использовать var txt = "", ....

Смежные вопросы