Ajax rss feed不能在localhost上运行

时间:2013-04-05 04:06:54

标签: ajax rss

我正在尝试从w3schools获取以下代码以通过IIS工作哦我的localhost。当我运行它时,我可以看到它正在尝试检索请求的RSS源,但不幸的是它永远不会执行。它只允许我查看可供选择的选项,但从不显示它们。

非常感谢您的任何帮助。

<html>
    <head>
        <script>
            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");
                  }
                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();
        }
        </script>
    </head>
<body>

    <form>
        <select onchange="showRSS(this.value)">
            <option value="">Select an RSS-feed:</option>
            <option value="Google">Google News</option>
            <option value="MSNBC">MSNBC News</option>
        </select>
    </form>
    <br>
    <div id="rssOutput">RSS-feed will be listed here...</div>
    </body>
</html> 

和php文件

<?php
    header('Access-Control-Allow-Origin: *');
    //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(0)->childNodes->item(0)->nodeValue;
    $channel_link = $channel->getElementsByTagName('link')
    ->item(0)->childNodes->item(0)->nodeValue;
    $channel_desc = $channel->getElementsByTagName('description')
    ->item(0)->childNodes->item(0)->nodeValue;

    //output elements from "<channel>"
    echo("<p><a href='" . $channel_link
      . "'>" . $channel_title . "</a>");
    echo("<br>");
    echo($channel_desc . "</p>");

    //get and output "<item>" elements
    $x=$xmlDoc->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('link')
      ->item(0)->childNodes->item(0)->nodeValue;
      $item_desc=$x->item($i)->getElementsByTagName('description')
      ->item(0)->childNodes->item(0)->nodeValue;

      echo ("<p><a href='" . $item_link
      . "'>" . $item_title . "</a>");
      echo ("<br>");
      echo ($item_desc . "</p>");
      }
?> 

2 个答案:

答案 0 :(得分:0)

这可能是一个跨平台问题。

如果您使用的是Chrome,请尝试按以下方式打开它:

chrome.exe -allow-file-access-from-files

答案 1 :(得分:0)

因为html代码执行此操作:

  • 检查是否选择了RSS-feed; ,然后
  • 创建服务器响应准备就绪时要执行的功能; ,然后
  • 将请求发送到服务器上的文件

你在Mac上使用它吗?我认为localhost无法在os x中提供服务器响应。或者,您必须使用终端解锁某些内容才能使其正常工作。

此代码是正确的,因为它可以在我的服务器上运行。