2

以前にここに投稿したことはありませんが、投稿する前にいくつかの調査を行って、他の人の時間を無駄にしないようにしましたが、同様の問題を投稿した人はいませんでした.

1 つのページで 2 つの RSS フィードを取得する際にこの問題が発生しました。http://www.w3schools.com/php/php_ajax_rss_reader.aspの例を編集しました。基本的に、html onload="runscripts();" から両方を呼び出すと、関数 : showRSS('Google'); rssevents('イベント'); そのうちの 1 つだけが DIV に入力されます。私はそれを自分の側で機能させましたが、変数が完全に異なっていても、1 つのフィードが他の DIV に入力されることがあります。

基本的に、コードを 2 倍にし、さまざまな変数を作成したので、1 つのページに 2 つの RSS フィードがあることを願っています。しかし、うまくいきません。

どんな助けでも大歓迎です:)私を正しい方向に向けることさえできます!乾杯 :)

コードは次のとおりです。

ロード時のボディは両方の関数を呼び出します:

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>");

  }
?>

どんな助けにも乾杯。ありがとう

4

1 に答える 1

0

AJAX 関数を使用する場合、最初の AJAX 関数のコールバックにシーケンシャル コード (別の AJAX 関数である可能性があります) を配置する必要があります。これにより、最初の呼び出しが完了した後に 2 番目の呼び出しが行われるようになります。そうしないと、最初の AJAX 関数が終了する前にシーケンシャル コードが実行される可能性があります。

于 2012-09-24T13:16:11.483 に答える