好的,首先让我解释一下我在做什么:
我正在尝试连接到http://www.nfl.com/liveupdate/scorestrip/ss.xml以获取xml并解析它当然跨域策略不允许我直接执行此操作。 SOOOO ..
我使用PHP通过代理连接到网站,这非常有效
然后回到我的主HTML文件中,我使用Ajax来解析该XML文件。问题是我的结果好坏参半。例如,在我的macbook pro上使用所有最新的浏览器(Safari,Firefox,Chrome),这不起作用。在我的iPhone上它可以工作。在我的Mac桌面上使用所有最新的浏览器。
任何人都知道为什么?
另外我不知道我在使用XML做什么,这是我第一次学习如何阅读XML。所以我可能需要你来解释如何更好地解析,因为我现在这样做的方式来自在线用户。
这是有效的PHP代理:
<?php
$server_url = "http://www.nfl.com/liveupdate/scorestrip/ss.xml";
$options = array
(
CURLOPT_HEADER => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_CONNECTTIMEOUT => 0,
CURLOPT_HTTPGET => 1
);
$service = $_GET["service"];
$request_headers = Array();
foreach($_SERVER as $i=>$val) {
if (strpos($i, 'HTTP_') === 0) {
$name = str_replace(array('HTTP_', '_'), array('', '-'), $i);
if ($name != 'HOST')
{
$request_headers[] = "{$name}: {$val}";
}
}
}
$options[CURLOPT_HTTPHEADER] = $request_headers;
switch (strtolower($_SERVER["REQUEST_METHOD"]))
{
case "post":
$options[CURLOPT_POST] = true;
$url = "{$server_url}".$service;
$options[CURLOPT_POSTFIELDS] = file_get_contents("php://input");
break;
case "get":
unset($_GET["service"]);
$querystring = "";
$first = true;
foreach ($_GET as $key => $val)
{
if (!$first) $querystring .= "&";
$querystring .= $key."=".$val;
$first = false;
}
$url = "{$server_url}".$service."?".$querystring;
break;
default:
throw new Exception("Unsupported request method.");
break;
}
$options[CURLOPT_URL] = $url;
$curl_handle = curl_init();
curl_setopt_array($curl_handle,$options);
$server_output = curl_exec($curl_handle);
curl_close($curl_handle);
$response = explode("\r\n\r\n",$server_output);
$headers = explode("\r\n",$response[0]);
foreach ($headers as $header)
{
if ( !preg_match(';^transfer-encoding:;ui', Trim($header)) )
{
header($header);
}
}
echo $response[1];
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
</body>
</html>
以下是使用AJAX的麻烦的HTML文件:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<script>
$.ajax({
type: "GET",
url: "http://www.allencoded.com/test3.php",
dataType: "xml",
success: function(xml) {
// Interpret response
$(xml).find('g').each(function() {
// Example: Show the XML tag in the console
console.log(this);
// Example: Put some output in the DOM
$("#divOutput").append($(this).attr("hnn"));
});
$(xml).find('g').each(function() {
// Example: Put some output in the DOM
$("#divOutput").append($(this).attr("vnn"));
});
}
});
</script>
<div id="divOutput"></div>
</body></html>
最后这里是XML供参考: http://www.nfl.com/liveupdate/scorestrip/ss.xml
我真的在寻找一种方法来解析它,因为这将是一个很棒的学习经历。顺便说一句,如果它帮助我的Macbook上的所有问题的Firefox告诉我:缺少)在括号中的第12行
如果你非常友好地回答一下noobie可能理解的处理XML的问题,我会非常感激,因为我是新手。
谢谢!
编辑: 添加我的网站链接到此代码: http://allencoded.com/footballxml.html 和 http://allencoded.com/test3.php
答案 0 :(得分:0)
如果它不是由某些C&amp; P问题引起的,这可能是原因:
$(xml).find('g').each(function() {
// Example: Put some output in the DOM
$("#divOutput").append($(this).attr("vnn"));
}) //Here is a colon missing!