我有一个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缺乏吗?
谢谢,
萨姆
答案 0 :(得分:1)
使用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>
此代码实际上并未使用艺术家和曲目,但我添加了它们以便让您了解它的工作原理。
答案 1 :(得分:0)
谢谢你的解决方案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>
再次感谢。