A-AA+then

เกี่ยวกับบทความ Rss xml ครับ

1,863
function LoadXMLDoc(url, handler, language) {
     document.getElementById(handler).innerHTML="Loding...";
     var req=Inint_AJAX();
     if (req!=null) {
          req.onreadystatechange=function() {
               if (req.readyState==4) {
                    if (req.status==200) {
                         xml=req.responseXML;
                         parseFeed(req.responseXML, handler);
                    }
               }
          };
          req.open("GET", "rss.php?feed="+url+"&lang="+language, true);
          req.send(null);
     }
}

function parseFeed(xml, handler) {
    //อ่านหัวข้อของเอกสารออกมา
     var _title = xml.getElementsByTagName('title')[0].firstChild.data; //<title>
     var _link = xml.getElementsByTagName('link')[0].firstChild.data; //<link>
     var _description = xml.getElementsByTagName('description')[0].firstChild.data; //<description>
     var header="<a href='"+_link+"' target='_blank' title='"+_description+"' class='header'>"+_title+"</a>";
     var _logo="";
     if(checkForTag(xml.getElementsByTagName('image')[0])) {
          var _url=xml.getElementsByTagName('url')[0].firstChild.data; //<url> ในโหนดแรก
          _logo= '<img src="'+_url +'"alt="" /><br />';
     }
     //อ่านรายการของเอกสาร
     var _item = xml.getElementsByTagName('item');
     var _copy = "<br />";
     for(var i=1; i<_item.length; i++) { //อ่านรายการย่อยต่างๆ
          //ป้องกันเครื่องหมายพิเศษ สำหรับ description
          var pubDate = xml.getElementsByTagName('pubDate').firstChild.data; //<pubDate>
          if(checkForTag(xml.getElementsByTagName('image')[0]) && i>0) { //<image> รูปของเนื้อหาข่าว (ถ้ามี)
               var _title = xml.getElementsByTagName('title')[i+1].firstChild.data; //<title>
               var _link = xml.getElementsByTagName('link')[i+1].firstChild.data; //<link>
          } else {
               var _title = xml.getElementsByTagName('title').firstChild.data; //<title>
               var _link = xml.getElementsByTagName('link').firstChild.data; //<link>
          }
          if(i>1) {
               var previousPubDate=xml.getElementsByTagName('pubDate')[i-1].firstChild.data;
          }
          if(pubDate!=previousPubDate || previousPubDate==undefined) {
               _copy += '<div class="pubdate">'+pubDate+'</div>';
          }
          _copy += "<a href='"+_link+"' target='_blank' class='newslink'>"+_title+"</a><br />";

     }
     //แสดงผล
     var aggregator=document.getElementById(handler);
     aggregator.innerHTML=_logo+header+_copy;
}

function checkForTag(tag) {
     if (tag != undefined) return true;
     return false;
}
คือว่าผมได้อ่านบทความและสนใจมากๆๆ แต่พยายามทำความเข้าใจแล้วก็ยังงง อยู่อ่ะครับ
ตรงที่เป็น สีแดงอ่ะครับ ผม งง ตรงค่าของ i ทำไมมัน บางอันก็เป็น 0 ไปเลย บางอันก็ i ,i+1 ทำไมถึงเป็นลักษณะนั้นอ่ะครับ หรือคือพูดง่ายๆๆ
เลยนะครับว่าตรงที่เป็นสีแดงผม งง มากมายเลยครับ  ช่วยอธิบายให้ฟังหน่อยนะครับ
ขอบคุณครับ ^^

5 ความคิดเห็น

ถ้ามี [] แสดงว่าเป็น array ครับ

ในตัวอย่างแสดงว่าเป็นการใช้ array โดยไม่ต้องจองหน่วนความจำครับ เพียงแต่อาจะทำความเข้าใจยากนิดนึง

var pubDate = xml.getElementsByTagName('pubDate').firstChild.data;

มาจาก

var pubDates = xml.getElementsByTagName('pubDate');
var pubDate = pubDates.firstChild.data;
1

ขอบคุณครับ แต่ที่ผมอยากรู้คือว่า
ทำไม จังหวะการเพิ่มของ Index ของ array นั้น มันไม่ได้เพิ่มเก็บจาก Index ที่ 0 อ่ะครับ
บางอันก็เป็น i+1  บางอันก็เป็น i-1 อ่ะครับ คือผมไม่ค่อยเข้าใจโค้ดว่ามันอ่านค่า จาก xml แล้วมีลำดับการทำงานยังไง
คืออ่านโค้ดแล้วรู้สึกยากๆๆๆๆมากๆๆ ครับ ช่วยแนะนำหน่อยนะครับ ขอบคุณครับ
ขอบคุณมากๆๆครับ กำลังสนใจแบบสุดๆๆ
2

ถามต่ออีกหน่อยนะครับ javascript สร้าง Xml พอมีตัวอย่างบางเปล่าครับ ช่วยแนะนำหน่อยนะครับ ขอบคุณครับ
3

แนะนำให้ preview เอกสาร XML ดู แล้วลองไล่ค่าทีละตัวน่าจะเข้าใจได้ง่ายกว่า ครับ ถ้าผมจะอธิบายให้ละเอียดได้ คงต้องไล่อธิบายกันตั้งแต่ DOM TREE XML ถึงจะมองภาพออกละครับ เอาไว้ถ้าผมมีเวลาผมจะพยายามเขียนเป้นบทความให้ละกัน ขอติดไว้ก่อนครับ

10 ปากว่า ไม่เท่าตาเห็น 10 ตาเห็น ไม่เท่ามือคลำ 10 มือคลำ ไม่เท่าทำเอง

xml สร้างด้วย Javascript ไม่ได้ครับ
4

ขอบคุณครับ อาจาร์ย ผมจะพยามดูก่อน นะครับ
อิอิ
5
^