AJAX和PHP问题!

| 我有一个PHP页面,该页面将从downloads.nl收集mp3链接。结果转换为XML并呈现良好。 当我尝试使用Ajax读取XML时,会出现问题。这些文件位于同一域中,这真让我感到困惑。这是我的PHP搜寻器。
    <?php
header(\"Content-type: text/xml\");
$artistname = $_GET[\'artistname\'];
$trackname = $_GET[\'trackname\'];
$newartistname = str_replace(\" \",\"+\",$artistname);
$newtrackname = str_replace(\" \",\"+\",$trackname);
$target_url = \"http://www.downloads.nl/results/mp3/1/\".$newartistname.\"+\".$newtrackname;
$userAgent = \'Googlebot/2.1 (http://www.googlebot.com/bot.html)\';
error_reporting(0);

// make the cURL request to $target_url
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html= curl_exec($ch);
if (!$html) {
    echo \"<br />cURL error number:\" .curl_errno($ch);
    echo \"<br />cURL error:\" . curl_error($ch);
    exit;
}

// parse the html into a DOMDocument
$dom = new DOMDocument();
@$dom->loadHTML($html);

// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate(\"/html/body//a\");
echo \'<?xml version=\"1.0\"?>\';
echo \'<downloads>\';
echo \'<trackname>\'.$newartistname.\"+\".$newtrackname.\'</trackname>\';
for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute(\'href\');
        if(strpos($url, \".cgi\")){
            echo \'<link>http://downloads.nl\'.htmlspecialchars($url,ENT_QUOTES).\'</link>\';
          }
}
echo \'</downloads>\';
?>
这是我的JavaScript函数
 function getDownloadLink(artistname,trackname){
        var xmlhttp4;
        if (window.XMLHttpRequest){
            xmlhttp4 = new XMLHttpRequest();
        }
        else{
            xmlhttp4 = new ActiveXObject(\"Microsoft.XMLHTTP\");
        }
        xmlhttp4.onreadystatechange=function(){
            alert(xmlhttp4.readyState);
            if (xmlhttp4.readyState==4 && xmlhttp4.status==200){
                try{
                    var downloadlink = xmlhttp4.responseXML.documentElement.getElementsByTagName(\"downloads\");
                    for (var i=0;i<downloadlink.length;i++){
                        alert(i);
                    }
                }
                catch(er){
                    alert(xmlhttp4.responseText);
                }
            }
            else{
                alert(\"ReadyState: \"+xmlhttp4.readyState+\" Status: \"+xmlhttp4.status);
            }
        }
        xmlhttp4.open(\"GET\",\"http://localhost/bone/searchmusic.php?artistname=\"+artistname+\"&trackname=\"+trackname,true);
        xmlhttp4.send(null);
    }
我不知道是什么问题。我无法正确呈现XML还是缺少ajax? 谢谢, 山姆     
已邀请:
        下面的页面,使用jQuery JavaScript框架,对我有用...
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">
<head>
    <title>Test</title>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
    <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js\" type=\"text/javascript\"></script>
    <script type=\"text/javascript\">
        $(function(){
            $(\'.getMp3\').click(function() {
                var artist = $(\'.artist\', this).text();
                var track = $(\'.track\', this).text();
                getDownloadLink(artist, track);
            });

            function getDownloadLink(artist, track) {
                $.ajax({
                    url:\'downloads.xml\',
                    dataType:\'xml\',
                    success: function(xml) {
                        $(xml).find(\'link\').each(function() {
                            $(\'#results\').append(\'<li><a href=\"\'+$(this).text()+\'\">track</a></li>\');
                        });
                    }
                });
            }
        });
    </script>
</head>
<body>
<p>
    <a href=\"#\" class=\"getMp3\">Get <span class=\"artist\">Lady GaGa</span> - <span class=\"track\">Bad Romance</span> tracks</a>
</p>
<ul id=\"results\"></ul>
</body>
</html>
…假设您有一个名为downloads.xml的文件,格式如下:
<?xml version=\"1.0\"?>
<downloads>
  <trackname>LadyGaga+BadRomance</trackname>
  <link>a</link>
  <link>b</link>
  <link>c</link>
  <link>d</link>
</downloads>
该代码实际上并没有使用演出者和曲目,但我添加了它们以使您了解其工作方式。     
        谢谢您的解决方案Andyb。现在它就像一种魅力。我之前看过jQuery Ajax,但从未想到它还不够强大。这是我现在正在使用的代码。
    function getDownloadLink(artist, track) {
        $.ajax({
            url:\'http://localhost/bone/searchmusic.php?artistname=\'+artist+\'&trackname=\'+track,
            dataType:\'xml\',
            success: function(xml) {
                $(xml).find(\'link\').each(function() {
                    $(\'#download\').append(\'<li><a href=\"\'+$(this).text()+\'\">track</a></li>\');
                    });
                }
            });
        }
</script>
再次感谢。     

要回复问题请先登录注册