我正在使用PHP v5.2.17运行Debian框。我试图解决XML文件的跨域问题,并使用它来获取任何xml并返回json:
<?php
header('content-type: application/json; charset=utf-8');
if( strlen($_GET["feed"]) >= 13 ) {
$xml = file_get_contents(urldecode($_GET["feed"]));
if($xml) {
$data = @simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($data);
echo isset($_GET["callback"]) ? "{$_GET[’callback’]}($json)" : $json;
}
}
?>
问题是,它没有将有效的json返回到jquery ..起始字符是“(”,结尾是“)”,其中jquery想要“[”作为开头,“]”作为结束。我已经获取了输出并使用了几个在线验证工具来检查它..
有没有办法可以在发回或传递json_encode选项之前更改这些字符?
答案 0 :(得分:1)
你可以将json_encode($ data)更改为json_encode(array($ data)),如果它需要一个数组(就像你说的那样):
$json = json_encode(array($data));
编辑:另外,我相信SimpleXml调用会产生一堆SimpleXmlElements,或许json_encode认为它应该是对象,而不是数组?也许转换为数组会产生正确的结果。
答案 1 :(得分:1)
你不能 json_encode()
SimpleXMLElement
(这是simplexml_load_string()
返回的类型。你必须将XML文件中的数据转换为某种本机PHP类型(大多数)可能是一个数组)。
抱歉这是错的。 json_encode()
实际上可以编码SimpleXMLElement
(至少在我的PHP版本5.3.4
上)。因此,如果您的客户端代码需要一个数组,则必须将$data
包装在一个数组中:
$json = json_encode(array($data));
答案 2 :(得分:0)
我们最有可能在数组上使用json_encode()函数。所以你先把XML内容放到PHP数组中然后应用json_encode()。我认为这样可以解决你的问题。
答案 3 :(得分:0)
您似乎正在发送一个空的回调参数或其他内容,但jQuery中的回调参数必须与此完全相同:callback=?