单个页面上有多个AJAX RSS阅读器?

时间:2012-09-24 13:09:57

标签: php ajax rss

我之前没有在这里发帖,但我在发布之前尝试做了一些研究,所以我没有浪费任何人的时间,但我还没有发现任何人张贴类似的问题。

我在一个页面上获取两个RSS源时出现此问题,我编辑了http://www.w3schools.com/php/php_ajax_rss_reader.asp示例。基本上当我从html onload =" runscripts();" 功能 :                 showRSS('谷歌');             rssevents('事件&#39); 其中只有一人填充了DIV。我确实让它在我身边工作,但偶尔会有一个Feed填充其他DIV,即使变量完全不同。

基本上我已经将代码增加了一倍并创建了不同的变量,所以希望我的单页上有两个RSS源?但它没有用。

欢迎任何帮助:)甚至指出我正确的方向!干杯:)

继承人代码:

on load on调用两个函数:

function runscripts(){  
        showRSS('Google');
        rssevents('events');        
}

Javascript标题:

function showRSS(str)
    {
    if (str.length==0)
      { 
      document.getElementById("rssOutput").innerHTML="";
      return;
      }
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }

    if(str=='Google')
    {
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("rssOutput").innerHTML=xmlhttp.responseText;
        }
      }
      xmlhttp.open("GET","getrss.php?q="+str,true);
      xmlhttp.send();
    }

    else{
        xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("upcomingevents").innerHTML=xmlhttp.responseText;
        }
      }
        xmlhttp.open("GET","getrssEvents.php?q="+str,true);
        xmlhttp.send();
    }



    }
    function rssevents(str)
    {
    if (str.length==0)
      { 
      document.getElementById("upcomingevents").innerHTML="";
      return;
      }



    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)
        {
        document.getElementById("upcomingevents").innerHTML=xmlhttp.responseText;
        }
      }



    xmlhttp.open("GET","getrssEvents.php?q="+str,true);
    xmlhttp.send();
    }

Php代码:

getrss.php:

<?php
//get the q parameter from URL
$q=$_GET["q"];

//find out which feed was selected
if($q=="Google")
  {
  $xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
  }
elseif($q=="MSNBC")
  {
  $xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
  }

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(1)->childNodes->item(1)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(1)->childNodes->item(1)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(1)->childNodes->item(1)->nodeValue;


//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');
$k=4;
$findme = '<img src';

for ($i=1; $i<=$k; $i++)
  {
  $item_title=$x->item($i)->getElementsByTagName('title')
  ->item(0)->childNodes->item(0)->nodeValue;
  $item_link=$x->item($i)->getElementsByTagName('link')
  ->item(0)->childNodes->item(0)->nodeValue;
  $item_desc=$x->item($i)->getElementsByTagName('description')
  ->item(0)->childNodes->item(0)->nodeValue;

  $pos = strpos($item_desc,$findme);

  if($pos==false)
  {
      $k=$k+1;
  }
  else{
  echo ("<p><div class='rsstitle' style='height:120px;'><div class='rsstable2'>" . $item_desc); 
  echo ("</div><div class='rsstable'><a href='" . $item_link . "' target='_blank'>" . $item_title . "</a></div></div><p/>");
  }

  }
?>

getrssEvents.php:

<?php
//get the q parameter from URL
$q=$_GET["q"];

//find out which feed was selected
if($q=="Google")
  {
  $xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
  }
elseif($q=="events")
  {
  $xml=("http://groupspaces.com/LoughboroughFinanceSociety/api/events?alt=rss");
  }

$xmlDoc2 = new DOMDocument();
$xmlDoc2->load($xml);

//get elements from "<channel>"
$channel=$xmlDoc2->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('summary')
->item(0)->childNodes->item(0)->nodeValue;
//$channel_desc = $channel->getElementsByTagName('gs:location')
//->item(0)->childNodes->item(0)->nodeValue;


//get and output "<item>" elements
$x=$xmlDoc2->getElementsByTagName('item');
for ($i=0; $i<=2; $i++)
  {
  $item_title=$x->item($i)->getElementsByTagName('title')
  ->item(0)->childNodes->item(0)->nodeValue;
  $item_link=$x->item($i)->getElementsByTagName('summary')
  ->item(0)->childNodes->item(0)->nodeValue;
  //$item_desc=$x->item($i)->getElementsByTagName('gs')
  ///->item(0)->childNodes->item(0)->nodeValue;

  //echo ("<div class='rsstitle'>" . $item_desc);   
  //echo ("<a  href='" . $item_link . "'>" . $item_title . "</a></div><p/>");
    echo(" <div class='rssevents'><div class='rsseventtitle'> ".$item_title."</div>". $item_link."</div>");

  }
?>

为任何帮助干杯。感谢

1 个答案:

答案 0 :(得分:0)

使用AJAX函数时,需要在第一个AJAX函数的回调中放入顺序代码(可能是另一个AJAX函数)。这可确保在第一个呼叫完成后进行第二次呼叫。 否则,顺序代码可能会在第一个AJAX函数完成之前执行。