我需要使用API密钥从网站获取XML数据,我使用的是AJAX和PHP。这是我的AJAX代码(顺便说一句,PHP文件在FileZilla服务器内):
var xmlHttpObj=null;
var isPostBack=false;
function CreateXmlHttpRequestObject( )
{
if (window.XMLHttpRequest)
{
xmlHttpObj=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
xmlHttpObj=new ActiveXObject("Microsoft.XMLHTTP")
}
return xmlHttpObj;
}
function MakeHTTPCall_Tags()
{
var link = "http://phpdev2.dei.isep.ipp.pt/~i110815/recebeXml.php";
xmlHttpObj = CreateXmlHttpRequestObject();
xmlHttpObj.open("GET", link, true);
xmlHttpObj.onreadystatechange = stateHandler_Tags;
xmlHttpObj.send();
}
function stateHandler_Tags()
{
if ( xmlHttpObj.readyState == 4 && xmlHttpObj.status == 200)
{
var selectTags = document.getElementById("tag");
var option;
var docxml = xmlHttpObj.responseXML;
var nodelist = docxml.getElementById("name");
alert(nodelist.length);
}
}
以下是PHP代码:
<?php
header("Access-Control-Allow-Origin: * ");
// pedido ao last.fm com a função file_gets_contents
// a string XML devolvida pelo servidor last.fm fica armazenada na variável $respostaXML
$respostaXML=
file_get_contents("http://ws.audioscrobbler.com/2.0/?method=tag.getTopTags&api_key=4399e62e9929a254f92f5cde4baf8a16");
// criar um objecto DOMDocument e inicializá-lo com a string XML recebida
$newXML= new DOMDocument('1.0', 'ISO-8859-1');
$newXML->loadXML($respostaXML);
echo $newXML;
?>
我从浏览器控制台收到此错误:得到http://phpdev2.dei.isep.ipp.pt/~i10815/recebeXml.php 500(内部服务器错误)有人知道怎么了吗?
内部服务器错误只是500 HTTP状态代码的通用名称:
500内部服务器错误一般错误消息,当遇到意外情况并且没有更具体的消息时给出。
您必须查看Web服务器的错误日志,以查找有关实际错误的详细信息。
根据你展示的代码样本判断,错误很可能是因为这个部分
$newXML->loadXML($respostaXML);
echo $newXML;
您的$newXML
是DOMDocument
实例。它没有实现__toString
,因此不能以这种方式进行响应。你必须使用
DOMDocument::saveXML
—将内部XML树转储回字符串
换句话说:
$newXML->loadXML($respostaXML);
echo $newXML->saveXml();
请参阅我在php中对DOMDocument的介绍
顺便说一下:如果您只想从远程API获取XML然后输出,那么将XML加载到DOM中是没有意义的。只需执行readfile
而不是file_get_contents
,并在调用后删除所有内容。
如果这还不能修复错误,我假设您的服务器已禁用allow_url_fopen
,并且您无法向远程URL发出请求。然后,您需要找到另一种下载XML的方法。